- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统课程设计实验报告k56czaba
操作系统课程设计
实验报告册
班级:
学号:
姓名:
教师:
实验说明
实验做为学习的重要促进手段,是为了深化对理论的理解,锻炼实践动手能力。
实验同时也作为考核的手段。
实验内容会在课程进行中下达,并且会分次地、部分地被抽查。
课程结束时,要求把所有的实验整理成一个完整的电子文档并上交,做为最后成绩的评定依据。
如果有兴趣的合适的题目,也可自己选题目。
格式说明
本文档文件名命名为“学号-姓名”,如小王”。
留白部分不足的自己调整长度,也可加页(增加内容应在表格内)。
每次的实验报告都要在这个文件中(按照实验次序依次)增加,而不是每次一个新的word文件。
本文档保存为doc格式( 请勿用Word2007的docx格式)。
重要提示:
实验正文建议使用小四号或五号宋体。
若附加图形,则请直接嵌入到实验手册相应位置。
各实验的源程序,请按实验分目录存放,如第一个实验的源程序存放在目录lab1下,第二个实验的源程序存放在目录lab2下等等,依次类推。
可互相讨论,但严禁抄袭网络或同学的实验结果。
实验编号 题
第二步:
修改系统调用表文件
linux-2.6.32.60/arch/x86/kernel/syscall_table_32.S
在文件中最后一组.long代码后添加一行
.long sys_mycall
第三步:
修改系统调用号文件,增加自己函数的系统调用号,并将系统总调用号增加。
linux-2.6.32.60/arch/x86/include/asm/unistd_32.h
在文件最后增加系统调用
#define __NR_mycall 337 //自己函数的调用号
同时修改系统调用函数总数,这是可以调用的编号上限
#define NR_syscalls 338
注意:系统调用号不是随意添加,一定是按顺序排列是第几个就是第几个编号,例如原有336个系统调用,新添加的必须放在最下边的第337的位置,不能改成其他位置,编号是337.
第四步:
增加系统调用声明,修改文件
linux-2.6.32.60/include/linux/syscalls.h
在文件后添加代码
asmlinkage long sys_mycall(int num);//我这里测试用的系统调用函数只用了一个int型参数,并返回一个long型值,这条语句是你自己的函数的完整声明,有几个参数写几个参数。
第五步:
添加系统调用函数的实现,修改文件
linux-2.6.32.60/kernel/sys.c
在文件后添加代码,必须和第四步的声明完全对应
printk()的输出可以在终端中用dmesg命令查看
asmlinkage long sys_mycall(int num)
第六步:内核编译
按照第二次课的PPT重新编译内核,用新编译的内核作为启动项。
第七步:打开终端编写测试代码,代码中调用你自己写的系统函数,编译运行查看运行结果是否调用成功。
也可以用dmesg命令查看进程的printk()函数的输出。
调用方式:syscall(系统调用号,参数列表);
创建一个.c的源文件,写入测试代码。
测试
实验编号 题
编写内核模块
准备 代码和makefile
代码
Makefile
Make
加载内核成功
移除
系统调用
实验编号 题
运行
2
源代码
Makefile
加载内核
成功
!
查看
Cat
卸载模块
实验编号 题
Make加载模块
验证功能:
源代码:
其他功能源代码:
#includestdio.h
#includefcntl.h
void main(){
char yourmsg[1024];
char c[1400];
char waa[1024];
char u[1024];
int i;
/*int h = open(/dev/rwbuf,O_RDONLY);
int n = read(h,yourmsg,sizeof(yourmsg));
close(h);
puts(yourmsg);
printf(----------------------------\n);
for(i=0;i1400;i++){
if(i1020) c[i]=a;
else c[i]=u;
}
h = open(/dev/rwbuf,O_WRONLY);
n=write(h,c,sizeof(c)+1);
close (h);
h = open(/dev/rwbuf,O_RDONLY);
n = read(h,waa,sizeof(waa));
close(h);
puts(waa);
print
文档评论(0)