操作系统课程设计实验报告k56czaba.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

beoes + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档