给Linux内核增加一个系统调用

仅作记录,小白萌新,大佬勿喷


1.修改系统调用表文件

    系统调用表在内核目录 /arch/x86/entry/syscalls/syscall_64.tbl

    对不同版本位置可能不一样

    添加自己的系统调用号



2.声明系统调用服务例程

编辑 内核目录/include/linux/syscalls.h

添加函数声明



3.实现函数

编辑内核目录/kernel/下的sys.c文件,实现函数


需要添加一个头文件


要求学号是偶数返回后六位,奇数返回后五位


4.编译和安装内核

sudo make mrproper

sudo make clean

sudo make menuconfig

sudo make -j8

sudo makemodules_install 

sudo make install

5.使用新内核启动,进行测试


测试代码


运行结果

符合实验要求

6.出现的错误及解决方案

6.1

编译内核时出现错误

修改menuconfig中的设置


选择kernel hacking


选择compile-time checks and compiler options

在 warn for stack frame larger than  将1024修改为4096

6.2


这个要注意函数声明,系统调用号,函数实现相关的内容要一一对应

6.3

如果重新编译需要执行

sudo make mrproper

sudo make clean

清除之前编译的文件,不然编译可能会报错

7.参考资料

https://stackoverflow.com/questions/57521081/warning-modules-install-missing-system-map-file-skipping-depmod

https://www.cnblogs.com/tsruixi/p/10777242.html

https://blog.csdn.net/weixin_34216196/article/details/92312515

https://blog.csdn.net/rikeyone/article/details/91047118

https://blog.csdn.net/nichng/article/details/79806624

https://blog.csdn.net/qq_41175905/article/details/80529245

你可能感兴趣的:(给Linux内核增加一个系统调用)