操作系统实验一 :向Linux内核增加一个系统调用

实验流程如下:

1.将内核压缩包linux-4.10.14.tar.xz(这个根据你实验年代更新内核包,个人实验指导书提供的是2.0版本的,无法通过,所以提倡用新一点的版本,比如这里的4.10.14)放入Ubuntu系统
2.把压缩包解压缩,使用命令 tar -xvf linux-4.10.14.tar.xz
3.将解压后的文件夹放到usr/src目录,这时候我们需要管理员权限,使用sudo su命令,之后输入密码就能获取权限,接下来使用mv linux-4.10.14 /usr/src将文件夹放入 /usr/src
这里写图片描述
4.修改源程序,增加系统调用实现
使用命令gedit /usr/src/linux-4.10.14/kernel/sys.c,在sys.c的末尾加入以下函数

asmlinkage int sys_helloworld(int number){ 
printk(“hello world”); 
return number; 
} 

这里写图片描述

5.修改头文件,增加系统调用声明
使用命令gedit /usr/src/linux-4.10.14/include/uapi/asm-generic/unistd.h
在223条声明处,改成这个,把原来的声明注释掉
这里写图片描述
6.修改系统调用表,注册系统调用
使用命令gedit /usr/src/linux-4.10.14/arch/arm64/include/asm/unistd32.h,在如图所示的位置改成这样,改动的是223号的位置 (图是改完后的截图,有的系统这步不需要更改,对比一下是否一样就好)
这里写图片描述
7.编译安装内核 (这部分会出现几个错误,把错误输入百度,都有解决方案,一定要学会遇到问题先自己上网查!!!)
第一步:yum -y install gcc 此步骤为安装gcc,一般不用进行这个步骤。
第二步:make mrproper 清除内核中不稳定的目标文件夹,附属文件及内核配置文件
第三步:make clean 清除以前生成的目标文件和其他文件
第四步:make menuconfig 配置内核,采用默认配置即可,选择exit
第五步:使用lscpu命令看看你的cpu支持几个线程。如果在虚拟机中,可以在配置中调整cpu的个数,然后重启虚拟机(不过改过后虚拟机大概会自动重启),进入到当前的/usr/src/linux-4.10.14文件夹下,如果lscpu显示有8个就使用make –j8命令,加快编译速度(不然要等好久的!!)

8.安装模块
使用命令make modules_install,安装完成后,会在/lib/modules/目录下生成一个linux-4.10.14目录,下面存放该系统的内核模块
9.安装内核
使用命令make install,会自动修改启动文件
10.进入linux-4.10.14内核系统
完成以上步骤后,重启电脑,在重启的过程中一直摁shift键,会出现下面这个界面,选择第二个高级选项
这里写图片描述
之后选择Linux 4.10.14 (recovery mode)打开
这里写图片描述
11.在程序中调用自己添加的系统调用
使用命令gedit test.c
输入:

 #include <stdio.h>
    int main(){
        syscall(223,1);
        return 0;
}

再使用以下命令
gcc test.c -o test
./test
dmesg -c

输出 hello world
(这里可能有的同学输出不了”hello world”,没关系,验收时,自己编写一个c程序输出“hello,world”水一波,
但是一般“make”就会很长时间,这里大概就会放你走的!!!)

猜你喜欢

转载自blog.csdn.net/qq_36172505/article/details/80372029