操作系统课程设计 实验报告册
班级: 学号: 姓名: 教师:
第 1 页 共 10 页
目 录
实验1 实验2 实验3 Proc实验4
系统调用.................................3 内核模块...................... ..........6 文件系统............................7 设备驱动.................................9 第 2 页 共 10 页
实验编号 1 题目 系统调用 (1)了解为什么要进行系统调用 实验(2)了解系统提供借口的目的 目的 (3)添加系统调用 为Linux内核增加一个系统调用,并编写用户进程的程序来测试。要求该系统调用能够完成以下功能:(1). 该系统调用有1个整型参数,接收输入自己的学实验号;(2). 若参数为奇数,则返回自己学号的最后5位。如您的学号为13051007,内容 则返回51007;(3). 若参数为偶数,则返回自己的学号的最后4位。如您的学号为13051004,则返回1004。 报 告 正 文 1.实验设计 1) 第一步:解压缩内核源码包linux-2.6.32.60.tar.bz2到目录/usr/src下 解压缩命令tar xvf linux-2.6.32.60.tar.bz2 /usr/src 解压缩后在/usr/src中多了一个linux-2.6.32.60的文件夹,之后的修改源码的工作都是在这个文件夹中进行。 2)第二步: 修改系统调用表文件 linux-2.6.32.60/arch/x86/kernel/syscall_table_32.S 在文件中最后一组.long代码后添加一行 .long sys_mycall 第 3 页 共 10 页
3)第三步: 修改系统调用号文件,增加自己函数的系统调用号,并将系统总调用号增加。 linux-2.6.32.60/arch/x86/include/asm/unistd_32.h 在文件最后增加系统调用 #define __NR_mycall 337 //自己函数的调用号 同时修改系统调用函数总数,这是可以调用的编号上限 #define NR_syscalls 338 4)第四步: 增加系统调用声明,修改文件 linux-2.6.32.60/include/linux/syscalls.h 在文件后添加代码 5)第五步: 添加系统调用函数的实现,修改文件 第 4 页 共 10 页
linux-2.6.32.60/kernel/sys.c 6)第六步:内核编译 运行结果如下: dmesg命令查看printk()输出:
第 5 页 共 10 页