操作系统课程设计(一):linux内核编译及添加系统调用

1.实验目的

通过实验,熟悉Linux操作系统的使用,掌握构建与启动Linux内核的方法;掌握用户程序如何利用系统调用与操作系统内核实现通信的方法,加深对系统调用机制的理解;进一步掌握如何向操作系统内核增加新的系统调用的方法,以扩展操作系统的功能。

2.实验内容

  1. Linux环境下的C或者C++编译和调试工具的使用
  2. 向Linux内核增加新的系统调用,系统调用的功能为打印出自己的学号和姓名信息。
  3. Linux新内核的编译、安装和配置。
  4. 编写应用程序以测试新的系统调用并输出测试结果。

3.实验步骤

第一步:解压文件(任意目录下载,以后以该目录进行操作)
1. wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.16.1.tar.xz 下载
2. xz –d linux-4.16.1.tar.xz
3. tar –xvf linux-4.16.1.tar 解压到我的主目录(/home/zyf)

第二步:修改源程序,增加系统调用
1. cd linux-4.16.1 进入linux解压包(我下的版本是4.16.1)
2. vim arch/x86/entry/syscalls/syscall_64.tbl 进入该文件分配系统调用号 (注意别写在最后面,大概是300多行,别写到下半部分的x32那一块里面)
这里写图片描述
3. vim include/linux/syscalls.h 进入该文件,添加服务例程的原型声明 (随便找一行就好,我写在最后面)
这里写图片描述
4. vim kernel/sys.c 实现系统调用服务例程(同样写在最后面,不上传源码了,自己手动打一遍吧,加深点印象)
这里写图片描述

第三步:编译安装内核(这一步中,可能会有很多报错,根据报错信息,看看少哪些组件,安装一些组件就好了
1. make menuconfig 配置内核,这一步中,可能会报错,根据报错安装一些必须的产品即可,命令为:apt-get –y install **(星号表示组件名字,根据报错提示安装吧)。进入图形界面后,默认保存退出即可
2. make –j2 编译内核,这里的参数j表示用几核编译,由于我开的虚拟机,就只分配了2个内核给虚拟机,故参数为-j2
3. make modules 编译模块,这一块第一次编译要很久,可能要2小时。但是后面再次编译就很快了
4. make modules_install 和 make install 安装模块和安装内核
5. reboot –n 立即重启(由于是虚拟机,故省略了update-grub2这一步骤)
6. uname –a 查看版本
这里写图片描述

第四步:编写测试程序并测试
1. 在任意目录下 vim hello.c,编译代码如下:注意红框中的部分,334需要对应修改成自己的系统调用号
这里写图片描述
2. gcc –o hello hello.c 把hello.c编译成hello,用于后面调用
3. ./hello 运行代码
这里写图片描述
4. dmesg查看日志
这里写图片描述

猜你喜欢

转载自blog.csdn.net/zyf2333/article/details/80043152