操作系统上机实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统课程设计实验报告册
班级:
学号:
姓名:
教师:
目录
实验1 系统调用 (3)
实验2 内核模块...................... . (6)
实验3 Proc文件系统 (7)
实验4 设备驱动 (9)
实验编号 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)第三步:
修改系统调用号文件,增加自己函数的系统调用号,并将系统总调用号增加。
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)第五步:
添加系统调用函数的实现,修改文件
linux-2.6.32.60/kernel/sys.c 6)第六步:内核编译
运行结果如下:
dmesg命令查看printk()输出:
实验编号 2 题目内核模块
实验目的(1)理解linux内核模块优缺点及简单原理(2)了解内核模块的相关作用
(3)熟悉内核模块的几个步骤
(4)编译内核模块
实验内容
题目一
编写一个内核模块;
编译该模块;
加载、卸载该模块;
题目二
用内核模块的方式为系统添加一个系统调用具体要求同专题一
报告正文
题目一:
编写相应的hello.c文件以及Makefile文件,编译加载该模块:
卸载该内核模块:
查看内核模块运行结果:
题目二
编写相应的系统调用程序
make
实验编号 3 题目 Proc 文件系统
实验目的(1)理解proc文件系统的作用
(2)了解proc文件系统中的重要部分文件(3)了解proc文件系统与内核模块的交互
实验内容(1)编写一个程序,用来读取和修改内核参数(任意参数即可,不涉及到内核编程,只需要使用标准C库中的函数)。
(2)在/proc目录下用自己的学号创建一个目录,如/proc/13101201。
然后在学号目录下创建两个文件,一个用自己的姓作为文件名,如/proc/13101201/zhang,此文件是只读的,用于显示当前进程的PID信息;另一个文件用自己的名字作为文件名,如/proc/13101201/xiaoming,此文件是可读写的。
报告正文
(1)如下采用modify.c读取和修改内核参数
题目二:如下,对以我的学号命名的文件进行读和写
完成相应的设备驱动程序及Makefile文件的编写后,make:
我的设计是,编写三个小程序write:写入信息;read:读信息;clean:清除信息则如下:
用write写入学号,read读出学号,clean清除信息后。
Read再读信息为空。