一、准备内核
下载并解压内核,并将其移动到/usr/src
目录下;安装编译内核所需要的依赖,详情参考在Ubuntu 18.04 下编译Linux内核
二、编写系统调用函数
进入需要安装的内核目录:可用TAB
补全目录
cd /usr/src/linux-5.0.2/
编写自己的系统调用函数:
sudo vim kernel/sys.c
在vim命令模式下,使用
Ctrl + F
和Ctrl + 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
五、编译安装内核
安装内核之后重启,详情参考在Ubuntu 18.04 下编译Linux内核
六、编写程序验证
创建C程序并执行系统调用:(通过syscall(xxx);
来调用xxx
号系统调用)
sudo vim test.c
编译C程序:
gcc -o test test.c
执行:
./test
查看结果:
dmesg
网友评论