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/>
  1. 将其拷贝到/usr/src目录下

  
  
  
  
  
```
cp linux-4.19.1.tar.xz /usr/src/

```
  1. 解压缩并链接

  
  
  
  
  
```
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

```

  
  
  
![Linux添加系统调用教程](https://www.icode9.com/i/l/?n=20&i=blog/1720465/202101/1720465-20210119075827326-1789187857.png)
  • 添加系统调用

共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

```

  
  
  
![Linux添加系统调用教程](https://www.icode9.com/i/l/?n=20&i=blog/1720465/202101/1720465-20210119075811098-222406715.png)
  1. 头文件中添加声明

  
  
  
  
  
```
vim include/linux/syscalls.h

```

  
  
  
![Linux添加系统调用教程](https://www.icode9.com/i/l/?n=20&i=blog/1720465/202101/1720465-20210119075750774-731824526.png)
  1. 定义系统调用函数

  
  
  
  
  
```
vim kernel/sys.c

```

  
  
  
在头文件中添加linkage.h

  
  
  
  
  
![Linux添加系统调用教程](https://www.icode9.com/i/l/?n=20&i=blog/1720465/202101/1720465-20210119075731504-1878736276.png)

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

  
  
  
  
  
![Linux添加系统调用教程](https://www.icode9.com/i/l/?n=20&i=blog/1720465/202101/1720465-20210119075715582-1224085095.png)
  • 重新编译内核,此处可以参考文档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

Linux添加系统调用教程

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

3 参考博客

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

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

标签: Linux, linux, 内核, include, 调用, 添加

相关文章推荐

添加新评论,含*的栏目为必填