Linux动态系统调用.doc
文本预览下载声明
电 子 科 技 大 学
实 验 报 告
学生姓名: 学 号: 指导教师:
实验地点: 实验时间: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
显示全部