Linux添加系统调用

1 概述

通常添加系统调用有两种方案:

* 重新编译内核
* 添加内核模块

此处我们采用重新编译内核的方式增加系统调用。

实验环境:X86_64 GNU/Linux 4.15.0 Ubuntu18.04

2操作步骤

  • 下载Linux内核源码(4.19.1)并解压

    1. 下载linux内核4.19.1

      官网链接:

      https://www.kernel.org/

      官网下载经常速度太慢,无法下载,提供另一个链接:

      http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/

    2. 将其拷贝到/usr/src目录下

      cp linux-4.19.1.tar.xz /usr/src/
    3. 解压缩并链接

      xz -cd linux-4.19.1.tar.xz| tar xvf -

      解压缩后出现linux-4.19.1目录,此时我们创建一个名为linux的目录,将linux软连接到linux-4.19.1,命令如下:

      ln -s linux-4.19.1 linux

  • 添加系统调用

    共x个文件,此时目录为/usr/src/linux

    arch/x86/entry/syscalls/syscall_64.tbl      //设置系统调用号,如果是32位就用syscall_32.tbl
    
    include/linux/syscalls.h       //系统调用的头文件
    
    kernel/sys.c                    //定义系统调用函数
    1. 设置系统调用号

      vim arch/x86/entry/syscalls/syscall_64.tbl

    2. 头文件中添加声明

      vim include/linux/syscalls.h

    3. 定义系统调用函数

      vim kernel/sys.c

      在头文件中添加linkage.h

      添加函数定义,此处函数为输出“operating system work1 succeed!”

  • 重新编译内核,此处可以参考文档Linux内核编译

  • 重启后编写测试文件

    hello.c 文件如下

    #define _GNU_SOURCE
    #include<stdio.h>
    #include<unistd.h>
    #include<sys/syscall.h>
    #include<sys/types.h>
    #include<signal.h> int main(){
    syscall(335);
    return 0;
    }

    编译该文件:

    gcc hello.c -o hello

    运行该文件

    ./hello
  • 用dmesg查看是否成功

    dmesg

    输出"operating system work1 succed!"表示成功!

3 参考博客

https://www.cnblogs.com/lqerio/p/10461937.html

(当然还参考了许多其他的博客,可都没什么用!)

Linux添加系统调用的更多相关文章

  1. Linux添加系统调用的两种方法

    前言 系统调用的基本原理 系统调用其实就是函数调用,只不过调用的是内核态的函数,但是我们知道,用户态是不能随意调用内核态的函数的,所以采用软中断的方式从用户态陷入到内核态.在内核中通过软中断0X80, ...

  2. Lab1:Linux内核编译及添加系统调用(详细版)

    实验一:Linux内核编译及添加系统调用(HDU) 花了一上午的时间来写这个,良心制作,发现自己刚学的时候没有找到很详细的,就是泛泛的说了下细节地方也没有,于是自己写了这个,有点长,如果你认真的看完了 ...

  3. 在Linux内核中添加系统调用,并编译内核

    1 环境准备 运行系统:vmware下安装的ubuntu10.10 32bit桌面版. 编译内核版本: linux-2.6.32.63 内核目录: /home/wanchouchou/linuxKer ...

  4. Linux3.18.6内核添加系统调用(32位系统)

    1.将已经下载好的内核解压,我的目录是 /home/shangsongchao/LinuxKernel/testlinux-3.18.6/linux-3.18.6 2.添加系统调用表: 在/home/ ...

  5. NeuSoft(2)添加系统调用

    1.下载内核 apt-get install linux-source 在/usr/src下 2.解压内核 cd /usr/src tar -jxvf linux-source-3.2.0.tar.b ...

  6. 【原创】Linux 增加系统调用

    Linux 增加系统调用大致步骤: 1.下载好内核文件,在内核源文件中添加好自己的调用函数. 2.编译内核 3.验证. 一.在内核源文件中增加自己的函数   首先将内核文件移至/usr/src/下并解 ...

  7. Linux内核-系统调用

    Linux内核-系统调用 1.与内核通信 #系统调用在用户空间进程和硬件设备之间添加了一个中间层 作用:1.为用户空间提供了一种硬件的抽象接口 2.系统调用保证了系统的稳定和安全 3.出于每一个进程都 ...

  8. Linux 增加系统调用 (转)

    Linux 增加系统调用大致步骤: 1.下载好内核文件,在内核源文件中添加好自己的调用函数. 2.编译内核 3.验证. 一.在内核源文件中增加自己的函数 首先将内核文件移至/usr/src/下并解压. ...

  9. Linux添加主机路由

    Linux添加主机路由:参考:http://zhidao.baidu.com/link?url=50qQ232ZiJqq1iftHvBdPzZh-JlQGi1DZ8wvF-j9dvQYsKiNgc-6 ...

随机推荐

  1. Java高并发与多线程(三)-----线程的基本属性和主要方法

    今天,我们开始Java高并发与多线程的第三篇,线程的基本属性和主要方法. [属性] 编号(ID) 类型long 用于标识不同的线程,编号唯一,只存在java虚拟机的一次运行 名称(Name) 类型St ...

  2. LuoguP5748 集合划分计数

    题意 一个有\(n\)个元素的集合,将其分为任意个非空子集,求方案数.集合之间是无序的,\(\{\{1,2\},\{3\}\}=\{\{3\},\{1,2\}\}\). 设\(f_n\)表示用\(n\ ...

  3. Spring Security,没有看起来那么复杂(附源码)

    权限管理是每个项目必备的功能,只是各自要求的复杂程度不同,简单的项目可能一个 Filter 或 Interceptor 就解决了,复杂一点的就可能会引入安全框架,如 Shiro, Spring Sec ...

  4. Slack 的想法很好啊,很有创新,牛。

    [原]https://www.leiphone.com/news/201411/aXHUpe4ZFI2sSwpb.html 由于以往一些用于办公的应用反响平平,因此对迅速崛起的办公交流应用Slack, ...

  5. 计算机网络第7版 PDF+ 计算机网络释疑与习题解答第7版 PDF 计算机网络 课后答案

    网上全都是要钱的,要么就是第六版的,属实被恶心到了. 链接:https://pan.baidu.com/s/15jCOH6LXnQfB1RwGpNgBFg提取码:byMB

  6. mysqldump 内存消耗

    MySQL :: MySQL 8.0 Reference Manual :: 4.5.4 mysqldump - A Database Backup Program https://dev.mysql ...

  7. Micro Frontends 微前端

    Micro Frontends https://martinfowler.com/articles/micro-frontends.html Integration approaches Server ...

  8. 博客-livevent-stl-cpp-nginx

    https://blog.csdn.net/move_now/article/category/6420121

  9. css水平、垂直居中的写法

    水平居中 行内元素: text-align: center 块级元素: margin: 0 auto position:absolute +left:50%+ transform:translateX ...

  10. Prometheus为你的SpringBoot应用保驾护航

    前面我们介绍了Prometheus的作用和整体的架构,相信大家对Prometheus有了一定的了解. 具体可以查看这篇文章:https://mp.weixin.qq.com/s/QoAs0-AYy8k ...