前不久好不容易给电脑装好了linux双系统,老师布置了作业:给Linux系统增加一个系统调用,啥也不会的我看了很多去年学长们写的博客就直接在Linux系统上开始操作了,周围的人都说我胆子太大了哈哈哈,他们很多人都不敢在双系统上面直接操作,一般都是在虚拟机上操作。
目录
系统调用的概念
由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API)。是应用程序同系统之间的接口。
实现系统调用的过程
下载linux内核压缩包
在百度上直接搜索kernel内核,就可以看到网站了,里面有各种版本的Linux内核压缩包,我就下载了一个最新版本的Linux-5.0.10.tar.xz
获取管理员权限(root)
用快捷键Ctrl+Alt+T打开终端输入指令sudo su
回车后需要输入你的用户登陆密码,密码在终端上是看不见的,回车后就ok了
准备下载一些相关编译程序
在终端上输入指令sudo apt-get install build-essential kernel-package libncurses5-dev
这是已经下载好的截图,输入指令后会有一个选择输入Y就行
我在第一次下载时有部分下载失败了,然后重新输入指令重新下载就好了
获取内核
将之前下载好的Linux-5.0.10.tar.xz内核压缩包放到桌面
在终端输入指令sudo mv /krissy/home/桌面/linux-5.0.10.tar /usr/src/
表示把桌面的内核压缩包放到usr/src/文件夹下
解压文件
在终端输入指令cd /usr/src
sudo tar-xvf /usr/src/linux-5.0.10.tar.xz
进入解压好的文件
在终端输入指令cd /usr/src/linux-5.0.10/kernel
安装vim
在终端输入指令sudo apt-get install vim
打开sys.c加入一段函数
输入指令vim sys.c
键盘上按i进入编辑状态,到末尾加上截图中asmlinkage long sys_helloworld(void)这一段函数,按Ese退出编辑状态,再输入:wq保存退出
添加函数声明
输入指令cd /usr/src/linux-5.0.10/arch/x86/include/asm/
vim syscalls.h
和刚刚一样的编辑方法,添加上面的函数声明,最后保存退出
加一个系统调用的id
输入指令cd /usr/src/linux-5.0.10/arch/x86/entry/syscalls
vim syscall_64.tbl
根据你自己的顺序添加一个系统调用号
我的是第335 个,添加完保存退出
配置内核
输入指令cd /usr/src/linux-5.0.10
sudo make mrproper
sudo make clean
sudo make menuconfig
在输入完menuconfig后
找到General setup回车后
找到Local version回车
修改成新的名字比如myKernel,最后ok,exit返回就行了
最后输入指令sudo make -j4表示开始编译,我们把终端最大化,编译大概要花一个多小时,最开始我的编译失败了,上面提示了很多找不到某某文件,我直接输入指令下载这些文件:sudo apt-get install XXXX,下载好了之后重新编译我的就成功了
安装内核
输入指令sudo make modules_install
sudo make install
安装内核也需要等几分钟
重启电脑
重启电脑后选择ubuntu高级选项,进去后有一个选择内核过程,我的就是XXXXXlinux-5.0.10(recovery什么的)
我重启后选择内核了但是进不去!!!我以为失败了还是Linux系统被我弄坏了,结果发现选择其他的内核是可以进去系统的,选择新的内核后会出现一句内核 has invaild signature,然后我跑去各种百度都没找到方法,最后进了一个国外的论坛看了很长的英文文章,最后我电脑重启进入bios,修改了security boot 最后再选择内核然后真的进去了!!敲开心
检验
打开终端然后输入指令uname -r,你就可以看到内核版本
然后可以在桌面新建一个文件夹,右键选择终端打开,在终端上输入vim XXX.c ,这个名字可以随便取一个
i进入编辑,把代码敲进去
载输入指令gcc XXX.c
./a.out
你可以看到返回值为1,说明增加系统调用成功了!!!
感想
最开始听到增加一个系统调用真的是啥也不会,还好有些学长写的博客特别清楚,但是最开始我对于一些基本的指令写法都没有看清楚导致出了不少问题,说明我们要先学一下指令,在后来的过程中也出现了很多错误以及别的问题,状况百出,还好最后都解决了,也学会了不少关于Linux系统增加一个系统调用的知识,下次感觉真的不敢直接在双系统上操作了,还是虚拟机比较保险。