admin管理员组

文章数量:1532197

笔者的第一次上机作业:在LINUX中增加新的系统调用

**要求如下:**在Unbuntu或Fedora环境下为Linux内核增加1-3个新的系统调用,并启用新的内核,编写一个应用程序测试新增加的系统调用是否能正确工作。

编写新内核可参见笔者的上一篇博文
https://blog.csdn/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
打开文件并设置系统调用号,然后保存


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

在倒数第二行定义系统调用函数如上图:
注意 :这里是printk,而不是我们常用的printf。因为printk是内核态命令,在系统日志里面输出的,可通过dmesg命令显示出来,而printf就是用户态命令,在终端输出。

4.打开Linux下文件 /include/linux/syscalls.h
//定义系统调用的头文件,然后保存

然后开始编译内核
安装必要的依赖:

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

打开文件,编写代码,保存

这里是调用我们自己写的335号新系统调用

然后在终端测试:

gcc xxx.c    //xxx是你的文件名
./a.out
dmesg



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

本文标签: 操作系统系统Linux