文档详情

Linux动态系统调用.doc

发布:2017-04-21约4.27千字共11页下载文档
文本预览下载声明
电 子 科 技 大 学 实 验 报 告 学生姓名: 学 号: 指导教师: 实验地点: 实验时间: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
显示全部
相似文档