Linux动态系统调用.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux动态系统调用

电 子 科 技 大 学 实 验 报 告 学生姓名: 学 号: 指导教师: 实验地点: 实验时间:2012.5.18--2012.5.22 一、实验室名称: 操作系统实验室 二、实验项目名称: Linux动态系统调用 三、实验学时: 4学时 四、实验目的: 掌握并实现一个linux动态系统调用的简单实例。 五、实验内容: 本次实验包括:模块的编写,系统调用的安装和编写一个简单的测试例子。 六、实验步骤: 1.系统调用的安装。 A、打开: cd linux-2.6.13/arch/i386/kernel; sudo vi syscall_table.S(相当于entry.s) 添加.long sys_compute记下系统调用号:319 B、打开 cd /usr/src/linux-2.6.13/include/asm-i386; sudo vi unistd.h 添加:#define __NR_my_add 318 修改:#define NR_syscalls 319 C、打开 cd /usr/src/linux-2.6.13/arch/h8300/kernel sudo vi syscalls.S 修改如下: D、添加系统调用的函数 cd /usr/src/linux-2.6.13/arch/i386/kernel sudo vi sys_i386.c 添加系统调用的函数: 2.编译内核 #cd linux-2.6.18*; #make mrproper; 执行以下命令: #make clean #make oldconfig或make config #make #make modules #make modules_install #make install 由于是cent5.1所以会自动安装所需文件,并放到相应位置。 # cd /boot/grub # vi menu.lst 修改menu.lst文件, 重新启动。 编写模块 编写compute.c文件,代码见附录1:compute.c. 编写make文件,代码见附录2:make. 将compute.c和make文件放入同一目录(由于修改了make文件,本人将其放入一个与内核无关的目录下)。本人为:/usr/src/liunx*/usr/下。 编译:#make,生成compute.ko等文件 插入模块:#insmod compute.ko 查看模块:#lsmod 运行测试用例:#./test 卸载模块:#rmmod compute 再次运行测试用例:#./test 4编写测试代码 见附录3:test.c 实验结果及分析 实验结果如下图所示: 与预期相符。 卸载模块后再次运行: 报错。 实验结论:实验成功。 分析:动态的系统调用与静态的系统调用性能相同。 总结及心得体会: 通过这些的学习与实践,丰富了编程经验,掌握了驱动开发的必备技能模块的动态加载。更多的学会了查找问题与解决问题的能力。 对本实验过程及方法、手段的改进建议: 本次试验难度恰当,讲解适合,设计也很好,暂时无改进意见。 报告评分: 指导教师签字: 附录1:compute.c /******************************************* **The module in kernel. **realise the comput of add,plus,sub,multyby ******************************************** **Author:BianTanggui **Date :2012-5-18 ******************************************** */ #include linux/kernel.h #include linux/module.h #include linux/init.h #include linux/version.h //compute : entry. long *compute(int a,int b, int c) { long r=0;//result; if(c == 0)//+; { r=(long)(a+b); } else if(c == 1)//-; { r=(long)(a-b); } else

文档评论(0)

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

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

1亿VIP精品文档

相关文档