操作系统概念LAB2—向Linux内核增加一个系统调用—实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LAB2实验报告
实验目的:1.熟悉Linux的基本命令
2.给Linux内核增加一个系统调用
实验步骤:
1.uname -a命名查看当前系统内核信息
2.分析当前内核为linux
3.13.0-66版本,所以我们下载一个接近当前的内核版本的Linux源码完成实验。尝试sudo apt-get install linux-source,下载当前内核源码。
3.将linux-source-3.13.0.tar.bz2包解压到/usr/src/目录下,进入/usr/src/目录,ls查看当前目录文件
4.进入红色框中的文件夹,实验在该文件夹下操作
5.修改kernel/sys.c文件:
6. 设置系统调用号:修改gedit arch/x86/syscalls/syscall_32.tbl
7.添加系统调用声明到头文件:gedit include/asm-generic/syscalls.h
8. 编译新的内核
8.1 首先安装ncurses库,这个库会在之后的编译中用到
sudo apt-get install libncurses5-dev
发现系统已存在,不用继续安装
8.2 为了方便,将编译需要执行的所有内容写成批处理文件执行,写好的文件放在“/usr/src/linux-3.13.0 ”目录下
执行gedit mycall.h
保存退出。
9.编辑完成后保存,并赋给批处理文件最高的读写权限 chmod 777 mycall.sh
10. 执行编译 ./mycall.sh
11. 接下来是漫长的两个小时等待过程
12. 重启电脑, 进入已经编译完成的系统。
13. 测试新的系统调用
13.1 在新系统内核下,新建test.c文件
文件内容:
#include
#include
int main(){
p rintf(“%d\n”, syscall(355, 11061135));
perurn 0;
}
编译main.c, 并查看输出gcc test.c -o out 运行: ./out
14.所得到的输出为:11061135
15.查看系统的log,可以看到:
[ 30.837499] 11061135 My name is Time.long
以下是kernel/sys.c文件中的系统调用的内容:
这是系统调用后的结果:
统内核调用成功。