- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- c++判断选择.doc
- BST实现动态查找表.doc
- C++第6次作业.doc
- C++模拟动态储存管理程序设计.docx
- C++实验6.doc
- C++链表的创建与操作.doc
- C++例题库.doc
- CAD六角螺栓动态块实例.doc
- cat命令.doc
- C++二元非线性方程组.docx
- 数学冀教版二年级下册《参观爱国教育基地》说课课件.ppt
- 统编版历史八年级上册第七单元 人民解放战争 大单元教学设计.pdf
- 人教版小学数学四年级下册第八单元《平均数与条形统计图》 单元教学设计(表格式).pdf
- 《口算两位数加减法》说课课件冀教版二年级下册数学.ppt
- 人教版四年级数学下册第九单元《数学广角——鸡兔同笼》 单元教学设计(表格式).pdf
- 牛津深圳版英语八年级上册Unit 8 English Week 单元整体教学设计.pdf
- 北师大版小学数学六年级下册3.2《图形的旋转(二)》说课课件.ppt
- 二年级下册冀教版第六单元《解决问题》说课.ppt
- 人教版九年级化学上册全册教学设计教案.pdf
- 人教版四年级数学下册第二单元《观察物体(二)》 单元教学设计(表格式).pdf
文档评论(0)