操作系统|操作系统 在LINUX中增加新的系统调用

笔者的第一次上机作业:在LINUX中增加新的系统调用
操作系统|操作系统 在LINUX中增加新的系统调用
文章图片

**要求如下:**在Unbuntu或Fedora环境下为Linux内核增加1-3个新的系统调用,并启用新的内核,编写一个应用程序测试新增加的系统调用是否能正确工作。
编写新内核可参见笔者的上一篇博文
https://blog.csdn.net/qq_41198425/article/details/88911961
本文主要讲述怎样进行系统调用

  1. 首先打开虚拟机,进入火狐浏览器下载linux内核
    下载完成之后应该是在你的下载目录里面,先把你的内核解压到当前目录,然后把内核移动到/usr/src里面,这个地方需要用管理员权限
sudo mv /下载/linux-4.19.10 /usr/src
2.注册新的系统调用
打开下载的Linux文件,按以下路径查找:
/arch/x86/entry/syscalls/syscall_64.tbl
打开文件并设置系统调用号,然后保存
操作系统|操作系统 在LINUX中增加新的系统调用
文章图片

我的是334号是最后一个系统调用,335是我自己新添加的系统调用
名字可以自己取,要加前缀sys_
3. 打开Linux下文件 /kernel/sys.c
//定义系统调用,然后保存
操作系统|操作系统 在LINUX中增加新的系统调用
文章图片

在倒数第二行定义系统调用函数如上图:
注意 :这里是printk,而不是我们常用的printf。因为printk是内核态命令,在系统日志里面输出的,可通过dmesg命令显示出来,而printf就是用户态命令,在终端输出。
4.打开Linux下文件 /include/linux/syscalls.h
//定义系统调用的头文件,然后保存
操作系统|操作系统 在LINUX中增加新的系统调用
文章图片

然后开始编译内核
安装必要的依赖:
sudo apt-get update//更新系统源码 sudo apt-get install vim //安装vim sudo apt-get install libncurses5-dev libssl-dev//下载依赖包 sudo apt-get install build-essential openssl sudo apt-get install zlibc minizip sudo apt-get install libidn11-dev libidn11 sudo apt-get install flex bison

接着清理产生的一些无用的文件
sudo make mrproper sudo make clean sudo make menuconfig

具体参见笔者上个博客
然后编译新内核
sudo make -j4

然后安装新内核
sudo make modules_install sudo make install

重启用 reboot命令
以上编译新内核和笔者上个博客相似,故不再赘述,详细图文如下:
添加链接描述
重启后,编写测试函数测试能否进行系统调用
首先在home下创建一个 XXX.c 文件,我创建的是coutname.c
操作系统|操作系统 在LINUX中增加新的系统调用
文章图片

打开文件,编写代码,保存
操作系统|操作系统 在LINUX中增加新的系统调用
文章图片

这里是调用我们自己写的335号新系统调用
然后在终端测试:
gcc xxx.c//xxx是你的文件名 ./a.out dmesg

【操作系统|操作系统 在LINUX中增加新的系统调用】操作系统|操作系统 在LINUX中增加新的系统调用
文章图片

操作系统|操作系统 在LINUX中增加新的系统调用
文章图片

一直往下拉,最后一行你会惊喜的发现
你的系统调用函数答应出来啦!
快去动手试试吧!

    推荐阅读