Ubuntu18.04下添加系统调用,重新编译内核

环境:双系统安装的ubuntu18.04

超细致的傻瓜教程~第一篇博客送给操作系统的作业

第一步:去ubuntu官网https://www.kernel.org下载内核tarball

                                      我下载的内核版本是5.0.13

Ubuntu18.04下添加系统调用,重新编译内核_第1张图片
**

第二步:安装依赖

打开终端,输入以下命令
Ubuntu18.04下添加系统调用,重新编译内核_第2张图片
**

第三步:把下载好的文件移动到usr/src中并解压

1.移动文件:直接找到下载好的文件,右键点击,选择move to,移动到usr/src目录下即可
(也可以用终端命令实现:输入 sudo mv ,之后按空格,把要移开的目录拖到终端机上, 后面再输入要移开到的路径)

2.在桌面上打开文件usr/src,在此目录下右键空白处,点击“打开终端”,输入解压命令:sudo tar linux-5.0.13.tar.xz

**

**

第四步:修改内核的代码

点开解压后的源码文件usr/src/linux-5.0.13,画绿线部分为接下来用到的三个文件夹
Ubuntu18.04下添加系统调用,重新编译内核_第3张图片

1.进入/arch/x86/entry/syscalls/syscall_64.tbl 文件,添加自己的系统调用号
( 图中标记部分是我自己添加的系统调用号,335这个数字之后会用到)
Ubuntu18.04下添加系统调用,重新编译内核_第4张图片
2.进入/include/linux/syscalls.h 添加函数声明
我的函数声明为 asmlinkage long sys_hello(void);
Ubuntu18.04下添加系统调用,重新编译内核_第5张图片

3.进入/kernel/sys.c 定义系统调用,实现函数功能
Ubuntu18.04下添加系统调用,重新编译内核_第6张图片

**

第五步:编译内核

在文件夹usr/src中右键点击打开终端,执行四个命令
1.sudo make menuconfig
会出现以下界面,选择save
Ubuntu18.04下添加系统调用,重新编译内核_第7张图片
2.sudo make
这一步电脑会自己运行很久很久~我的一次就成功了并没有死机什么的

3.sudo make modules_install
4sudo make install
看到下图 什么Found done ,那这一步就圆满成功了
Ubuntu18.04下添加系统调用,重新编译内核_第8张图片

**
**

第六步:重启电脑,进入重新生成的内核

在上一步完成后,关机,开机。进入时不要选第一个ubuntu,选第二个ubuntu高级选项。然后选择刚刚生成的内核系统

(我遇到的问题:我在这步点进去之后出现了一个菜单recovery menu,自己胡乱试了好几个选项,最后选择了network,然后点ok,出现了一堆代码之后就正常进入了ubuntu系统)
Ubuntu18.04下添加系统调用,重新编译内核_第9张图片

**
**

**

第七步:编写程序验证:创建C程序并执行系统调用

1.安装vim 在终端输入命令 sudo apt-get install vim
2.使用vim建立c文件 在终端输入命令 vim hello.c (hello.c为我的文件名)
3.键盘上点字母a,进入插入(insert)模式,在编辑区输入主程序代码
(如下图,图中335为之前自己添加的系统调用号)
Ubuntu18.04下添加系统调用,重新编译内核_第10张图片
4.保存并退出:按一下Esc键,输入 :wq 点回车,则保存并退出
5.编译c程序: 终端输入命令: gcc -o hello hello.c
6.执行: 终端输入命令 ./hello
7.终端输入 dmesg查看结果
Ubuntu18.04下添加系统调用,重新编译内核_第11张图片
Ubuntu18.04下添加系统调用,重新编译内核_第12张图片
**

欧克!成功啦~

从下午5点多一直到晚上12点~在电脑漫长编译的时候自己就看电视剧!
主要是将下面两个网址的内容结合着看,一篇简书一篇去年的博客,自己百度了些问题,整理了以上的傻瓜教程~
在Ubuntu下添加系统调用https://www.jianshu.com/p/061ec6c81ecf)
Ubantu18.04小白添加系统调用(内核4.16.8)https://blog.csdn.net/weixin_39478524/article/details/80377901
**

你可能感兴趣的:(Ubuntu18.04下添加系统调用,重新编译内核)