操原上机(一) 在Linux中增加新的系统调用

要求

在LINUX中增加新的系统调用

1、编写新的系统调用函数(指函数实现部分)
2、注册新的系统调用(声明系统调用函数和编号)
3、编译新LINUX内核
4、编译和安装模块
5、启动新的LINUX内核
6、编写应用程序测试新的系统调用

建议环境

UBANTU/Fedora
开源内核2.6.38或其它

下面讲如何实现在Ubuntu18.04如何中增加新的系统调用

前提

Ubuntu系统中有不止一个内核,如果没有,可以参考我前面的文章,编译一个新的内核。

添加自定义的系统调用

输入以下命令:

cd /usr/src/linux-5.0.2/
sudo gedit arch/x86/entry/syscalls/syscall_64.tbl

在打开的文件中添加自定义的系统调用号
如图所示,335,336,337是我自己添加的系统调用的调用号
操原上机(一) 在Linux中增加新的系统调用_第1张图片
输入命令:

sudo gedit include/linux/syscalls.h

在打开的文件的末尾添加函数声明,如图所示
操原上机(一) 在Linux中增加新的系统调用_第2张图片
输入命令:

sudo gedit kernel/sys.c

在打开的文件末尾添加函数的定义,如图所示
操原上机(一) 在Linux中增加新的系统调用_第3张图片

编译内核

依次输入以下命令:

sudo make mrproper
sudo make clean
sudo make menuconfig
sudo make -j4
sudo make modules_install        //安装内核模块
sudo make install      //安装内核

如何编译内核,具体参考我前面的文章

验证添加的系统调用

编译完内核之后,重新启动系统,在Ubuntu高级选项中选择刚刚编译的新内核启动系统
编写一个C语言程序验证添加的系统调用
输入命令:

sudo gedit test.c

创建一个文本文档,写一个调用系统函数的程序,保存退出
操原上机(一) 在Linux中增加新的系统调用_第4张图片
然后输入命令:

sudo gcc -o test test.c
sudo ./test

运行该程序
再输入命令
sudo dmesg
查看系统进程,可以看到系统调用的输出
如图所示:
操原上机(一) 在Linux中增加新的系统调用_第5张图片操原上机(一) 在Linux中增加新的系统调用_第6张图片

你可能感兴趣的:(操作系统原理)