名称 | 版本 |
---|---|
OS | Ubuntu 22.04 LTS |
Current Kernel | 5.15.0-56-generic |
Destination Kernel | 5.16.60 |
首先要会编译linux内核的源码,这块在我的另外一片文章里面。
https://blog.csdn.net/jl19861101/article/details/128327069
- 打开linux内核源码目录/arch/x86/entry/syscalls/syscall_64.tbl如图所示,我在这里添加了两个系统调用。系统调用是按照整数,数字排列的,找到这个文件中没有使用的数字,就可以使用。
- 打开头文件/include/linux/syscalls.h可以看到几乎所有的系统调用,这个头文件中都有函数的声明。我们把刚才我们定义好的系统调用号的两个函数,在这里也要声明以下,一个返回long,入参为void。另一个接收char*类型和字符串长度。这里要注意,这里既然是系统调用,会涉及到内核太和用户太的切换,并且用户空间和内核空间的切换。传入的数据类型为用户空间的数