在Ubuntu下添加系统调用

一、准备内核

下载并解压内核,并将其移动到/usr/src目录下;安装编译内核所需要的依赖,详情参考在Ubuntu 18.04 下编译Linux内核

二、编写系统调用函数

进入需要安装的内核目录:可用TAB补全目录
cd /usr/src/linux-5.0.2/
编写自己的系统调用函数:
sudo vim kernel/sys.c

在vim命令模式下,使用Ctrl + FCtrl + B可快速翻页

在末尾插入以下代码:

asmlinkage void sys_hello (void)
{
      printk("Hello!This is Rimson's system call");
}

printf运行在用户态,而printk运行在内核态;后者打印的内容不一定显示在终端上,但一定会保存在内核缓冲区里,可以使用dmesg查看

然后:wq退出

添加系统调用函数

三、声明系统调用函数

编辑声明系统调用函数的头文件:(注意路径和文件名不要弄错,推荐使用自动补全)
sudo vim arch/x86/include/asm/syscalls.h

声明函数

四、添加系统调用编号

编辑文件:
sudo vim arch/x86/entry/syscalls/syscall_64.tbl

添加系统调用bina

五、编译安装内核

安装内核之后重启,详情参考在Ubuntu 18.04 下编译Linux内核

六、编写程序验证

创建C程序并执行系统调用:(通过syscall(xxx);来调用xxx号系统调用)
sudo vim test.c

test.c

编译C程序:
gcc -o test test.c
执行:
./test
查看结果:
dmesg

推荐阅读更多精彩内容