Linux增加系统功能调用
Linux源代码下载并解压到相应文件目录
1.下载源代码
链接: Linux内核官网.
感觉内核更新的速度超快的~做实验时下载的内核版本为4.15.10,现在好像都5字开头了。
2.获取超级用户权限
用 sudo su 命令来获取超级用户权限,成功获取后可以发现字体颜色变得苍白了:)(超级用户为所欲为啊),然后也可以用 whoami 命令来查看
3.解压
先将下载好的内核文件移动到/usr/src目录下,切换到该目录,解压文件,然后进入Linux解压文件。
添加系统调用
1.添加头文件&功能调用函数
进入/usr/src/linux-4.15.10/kernel/sys.c 修改源代码,用命令 gedit sys.c 打开文件,加入linkage.h头文件&增加功能调用函数。
头文件:
新增的功能调用函数:
在这里我增加功能调用函数是打印函数,当然也可以有其他功能的,如复制等。这里的printk函数是内核专属的。
2.加入系统调用函数声明
进入目录/usr/src/linux-4.15.10/arch/x86/include/asm,用命令 gedit syscalls.h,然后加入函数声明。
头文件:
#include<linux/linkage.h>
函数:
asmlinkage int sys_mycall(int number);
3.加入系统调用号
3)进入目录/usr/src/linux-4.15.10/arch/x86/entry/syscalls,用命令 gedit syscall_64.tbl打开文件,然后加入系统调用号,保存,退出。
在这次实验中我新增加的系统功能调用号为333:
配置并编译内核
编译内核的文章已经写过了,这里不再赘述,不熟悉的同学可以看这篇文章。
链接: 编译Linux内核.
测试结果
1.进入新的内核,编写测试用例
可以用 uname -r 命令来查看当前内核版本
编写测试用例
2.编译用例,查看结果
用 gcc 来编译代码,执行代码,然后可以用dmesg命令来查看新增的系统调用函数打印的内容。