操作系统上机实验报告Word文档格式.docx
《操作系统上机实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统上机实验报告Word文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
实验2内核模块................................6
实验3Proc文件系统............................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下
解压缩命令tarxvflinux-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代码后添加一行
.longsys_mycall
3)第三步:
修改系统调用号文件,增加自己函数的系统调用号,并将系统总调用号增加。
linux-2.6.32.60/arch/x86/include/asm/unistd_32.h
在文件最后增加系统调用
#define__NR_mycall337//自己函数的调用号
同时修改系统调用函数总数,这是可以调用的编号上限
#defineNR_syscalls338
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读取和修改内核参数
题目二:
如下,对以我的学号命名的文件进行读和写
4
设备驱动
(1)了解Linux设备驱动
(2)熟悉常见的Linux驱动例子
(3)设计设备驱动程序,使之完成相应的功能
完善例子中的字符设备程序,使之满足以下功能:
安装设备后从设备中读出字符串为你的学号;
设备支持每次写入字符不超过1024个,超过部分被丢弃;
用户可以读出最近写入到设备中的字符;
设备关闭前不能被多次打开;
设备支持系统调用ioctl(intd,intreq,…)
req=0x909090,清除设备中写入的字符串;
完成相应的设备驱动程序及Makefile文件的编写后,make:
我的设计是,编写三个小程序write:
写入信息;
read:
读信息;
clean:
清除信息则如下:
用write写入学号,read读出学号,clean清除信息后。
Read再读信息为空