本文主要突出操作中遇到的问题及解决方案,关于详细过程不做过多展示,大家可以参考
https://blog.csdn.net/qq_41175905/article/details/80529245
https://blog.csdn.net/SweeNeil/article/details/83684565

一、什么是系统调用

系统调用:

用户在编程时可以调用的操作系统功能,操作系统提供给编程人员的唯一接口, 使CPU状态从 用户态陷入内核态。
系统调用机制的设计:操作系统作业:向内核中添加一个系统调用
本质:中断的一种

二、系统调用的准备

1.获取root权限(即管理员权限)

2.安装相应的程序
安装方式sudo apt-get install ××

主要程序有
build-essential
kernel-package
libncurses5-dev
libssl-dev

3.下载内核
网站https://www.kernel.org/
然后这边要注意的是,要保证下4开头的版本,我下的第一个是 5.0.14的,在内核编译那make 出现报错,找不到原因
我的版本是linux-4.9.173,大家可以参考下。
操作系统作业:向内核中添加一个系统调用

4.解压到 usr/src
sudo mv /home/dengyang/下载/linux-4.9.173.tar.xz /usr/src/
注意/usr/src/前面有空格,文件名更改成自己的

三、系统调用的实现

1.安装vim。vim可以对.c文件操作

2.打开sys.c加入函数
asmlinkage long sys_helloworld(void){
printk( “helloworld!”);
return 1;
}
这边要注意的是,按"G"是跳到末尾,按"i"是进入编辑模式,在编辑完你的内容后,按"ESC"退出编辑模式,然后按“:wq”保存退出,你也可以按“:q”不保存退出

3.添加声明

4.加一个系统调用的id
建议与博客中设置相同,后期好记

四、编译内核

进入cd /usr/src/linux-4.16.10
1.设置编译
依次输入这四条语句
sudo make mrproper
sudo make clean
sudo make menuconfig
这边肯定会报错!
加入
sudo apt-get install bison
sudo apt-get install flex
如果有显示缺东西,把上文的三篇博客所涉及到的程序都安一遍

在mecuconfig直接sava->ok->exit->exit

2.编译
sudo make

3.安装
sudo make modules_install //安装内核模块
sudo make install //安装内核
这边需要注意一些系统的提示,缺少什么程序,安了后再运行

五、启动内核

注意:重启后进入第二个选项

操作系统作业:向内核中添加一个系统调用
选择你的内核,注意不要加后缀
操作系统作业:向内核中添加一个系统调用

可能报错
操作系统作业:向内核中添加一个系统调用

用该方法解决
操作系统作业:向内核中添加一个系统调用

六、编写程序并调用

操作系统作业:向内核中添加一个系统调用

注意最后可能不会显示helloworld,我们要给dmesy权限以便查看
操作系统作业:向内核中添加一个系统调用
最后再运行一次
操作系统作业:向内核中添加一个系统调用
大工告成!

七、后

相关文章: