美文网首页
吐血实验:向Linux内核增加一个系统调用(没有尽头的debug

吐血实验:向Linux内核增加一个系统调用(没有尽头的debug

作者: Your7Maxx | 来源:发表于2020-03-20 16:41 被阅读0次

实验科目:操作系统

实验名称:向Linux内核增加一个系统调用

今天下午做了个实验,实验内容本身不难,但是环境的配置、内核的编译、kernel源码的安装真的是要了老命了,这个实验本来在前几周就该完成(跟着网课的进度是这样的),但是由于我之前比较熟悉和钟爱VB虚拟机,而VB对于共享文件这块实在不敢夸奖,所以正好前几天装了VM也配了CentOS的镜像上去了,今天就把这个实验做了吧,没想到的是,这个实验差点把自己送走。

下面开始:
        首先我们先从www.kernel.org网站上,下载相关版本的linux内核源码,我这里下载的是4.18.14版本(附上地址:http://ftp.jaist.ac.jp/pub/Linux/kernel.org/linux/kernel/v4.x/linux-4.18.14.tar.gz)。这里可能大家下载的时候就比较烦躁了,如果不挂代理下载,几十B/s的下载速度能让你现在就直接放弃,因为我是百度网盘的会员,所以挂在网盘上离线下载,速度很nice。下载完成之后,将该文件放在windows与vmware的共享文件夹路径下。(这里需要大家先下载一下vm tools再开启共享文件夹的使用,我就不po教程了,网上有)

       进入 /mnt/hgfs目录下(默认的共享文件目录)

1

发现我们下载好的内核文件在里面。

将该文件剪切到/usr/src目录下:(这里需要root权限并且需要点时间,内核文件还是挺大的)

2

接着进入内核文件目录里:

3

打开编辑kernel/sys.c去添加自己的函数:vim kernel/sys.c

4

自定义函数了,就得添加声明:vim arch/x86/include/asm/syscalls.h

5 6

添加调用号:vim arch/x86/entry/syscalls/syscall_64.tbl

7 8

下面我们把没用的文件删去:

                sudo make mrproper

                sudo make clean

(可能会报错没有安装gcc,导致make命令执行不了)

安装下gcc和c++编辑器以及内核编译

9

接着配置:

sudo make menuconfig:

发现爆错:

10

提示说无法找到ncurses的包,进行安装:

第一个和第三我都yum了一下,yum源里都没有,但是第二个有,我就下载的第二个。

下载完成之后再次make menuconfig:

11

这里千万别手贱了,保持默认状态,save->ok>exit,你一定不想知道手贱的后果。

下面我们编译新内核并且安装:

刚开始编译的时候,编译速度太慢了,我就去google了一下,发现一个解决方法:将处理机内核总数调整为4。

我试了下:报错。

这里省去若干撞南墙的解决过程,直接给大家po上正确的解决方法:安装elfutils-libelf-devel。

12

再次编译:make -j2

速度明显提升了好多!但是突然又报错了:

openssl/opensslv.h:没有那个文件或目录。

(经过google和上次的经验 找到了解决方法,此处也省略解决问题的过程,直接po上方法)

安装 openssl-devel:

13

安装完成之后再次make -j2编译:

顺畅了,不过时间还是有点长。。

最后完成编译:

14

下面安装:(都是root权限)

make install modules_install

报错:

15

这里也尝试了很多方法,最后我试了下将yum更新一下,发现就成功了?(一脸苦笑?)

不知道大家更新有没有用,这个问题我也没找到特别有用的解决方法,很抱歉,唉。

最后我们make install一下就OK了。

如果想看看自己的系统调用怎么样可以实验一下:

自己写一个c文件,在代码里添加下自己的系统调用,syscall(你之前设置的系统调用号)。

16

gcc编译一下,然后运行。

17

最后使用dmesg用来显示内核环缓冲区内容,可以看到我们添加进的提系统调用函数内容。

实验真的不算复杂,也只是加深下对操作系统中系统调用的理解(其实也算不上加深了,但是debug的过程到挺让人印象深刻的),记录下这个“美好”的下午,开始新的学习把!

相关文章

网友评论

      本文标题:吐血实验:向Linux内核增加一个系统调用(没有尽头的debug

      本文链接:https://www.haomeiwen.com/subject/pxbjyhtx.html