Linux操作系统中断.docx
《Linux操作系统中断.docx》由会员分享,可在线阅读,更多相关《Linux操作系统中断.docx(8页珍藏版)》请在冰豆网上搜索。
Linux操作系统中断
新乡学院计算机与信息工程学院
实验报告
课程名称操作系统原理
专业计算机科学与技术
班级3班
学号2013052701xx
姓名xxx
实验成绩
任课教师xxx
2013年12月3日
实验名称
中断
姓名
xxx
成绩
实验地点
A14-322
实验时间
2013年12月3日
一、实验目的与要求
实验目的:
进一步熟悉linux中断的执行过程
实验要求:
认真
二、操作步骤
1、编写intr.c文件代码,代码如下:
#include
#include
#include
#include
staticintirq;/*模块参数-中断号*/
staticchar*interface;/*模块参数-设备名*/
staticintcount=0;/*统计插入模块期间发生的中断次数*/
module_param(interface,charp,0644);
module_param(irq,int,0644);
staticirqreturn_tintr_handler(intirq,void*dev_id)
{
staticlonginterval=0;
if(count==0){
interval=jiffies;
}
interval=jiffies-interval;/*计算两次中断之间的间隔,时间单位为节拍*/
printk("Theintervalbetweentwointerruptsis%ld\n",interval);
interval=jiffies;
count++;
returnIRQ_NONE;
}
staticint__initintr_init(void)
{
if(request_irq(irq,&intr_handler,IRQF_SHARED,interface,&irq)){/*注册中断服务程序,注意内核版本不同,共享标志可能有所不同*/
printk(KERN_ERR"FailstoregisterIRQ%d\n",irq);
return-EIO;
}
printk("%sRequestonIRQ%dsucceeded\n",interface,irq);
return0;
}
staticvoid__exitintr_exit(void)
{
printk("The%dinterruptshappenedonirq%d",count,irq);
free_irq(irq,&irq);/*释放中断线*/
printk("FreeingIRQ%d\n",irq);
return;
}
module_init(intr_init);
module_exit(intr_exit);
MODULE_LICENSE("GPL");
2.编写Makefile文件代码,代码如下:
obj-m:
=intr.o
CURRENT_PATH:
=$(shellpwd)
LINUX_KERNEL:
=$(shelluname-r)
#Linux内核源代码的当前版本
LINUX_KERNEL_PATH:
=/lib/modules/$(shelluname-r)/build
#Linux内核源代码的绝对路径
all:
make-C$(LINUX_KERNEL_PATH)M=$(CURRENT_PATH)modules#编译模块
clean:
make-C$(LINUX_KERNEL_PATH)M=$(CURRENT_PATH)clean#清理
三、实验结果
1.在模块文件intrt.c和Makefile当前打开终端,输入make命令之后,所在的文件会编译出其他文件
[root@localhost桌面]#ls
123hellomod.c~intr.ko.unsignedMakefileresult~
2.c~intr.cintr.mod.cMakefile~tools
a.c~intr.c~intr.mod.omodules.order第二个实验
a.txt~intr.kointr.oModule.symvers第一个实验
2.在运行插入模块insmod之后,出现执行插入模块操作后,再次查看模块列表就会看到hellomod模块存在。
[root@bogon桌面]#insmodintr.kointerface=eth0irq=9
[root@bogon桌面]#lsmod
ModuleSizeUsedby
intr11860
vfat85750
fat470491vfat
usb_storage391080
fuse568002
ebtable_nat14690
ebtables151761ebtable_nat
ipt_MASQUERADE18223
3.执行卸载模块命令后就会发现intr模块从模块列表中消失。
[root@bogon桌面]#rmmodintr
[root@bogon桌面]#lsmod
ModuleSizeUsedby
vfat85750
fat470491vfat
usb_storage391080
fuse568002
ebtable_nat14690
4.执行dmesg命令可以看到输出信息。
IRQhandlertypemismatchforIRQ0
currenthandler:
timer
Pid:
10391,comm:
insmodTainted:
G---------------T2.6.32-279.el6.i686#1
CallTrace:
[]?
__setup_irq+0x2e3/0x320
[]?
request_threaded_irq+0x100/0x200
[]?
intr_handler+0x0/0x58[intr]
[]?
intr_init+0x0/0x6b[intr]
[]?
intr_init+0x2c/0x6b[intr]
[]?
do_one_initcall+0x2f/0x1c0
[]?
sys_init_module+0xb4/0x220
[]?
syscall_call+0x7/0xb
Theintervalbetweentwointerruptsis0
FailstoregisterIRQ0
Nomodulefoundinobject
IRQhandlertypemismatchforIRQ0
currenthandler:
timer
Pid:
10580,comm:
insmodTainted:
G---------------T2.6.32-279.el6.i686#1
CallTrace:
[]?
__setup_irq+0x2e3/0x320
[]?
request_threaded_irq+0x100/0x200
[]?
intr_handler+0x0/0x58[intr]
[]?
intr_init+0x0/0x6b[intr]
[]?
intr_init+0x2c/0x6b[intr]
[]?
do_one_initcall+0x2f/0x1c0
[]?
sys_init_module+0xb4/0x220
[]?
syscall_call+0x7/0xb
Theintervalbetweentwointerruptsis0
FailstoregisterIRQ0
IRQhandlertypemismatchforIRQ0
currenthandler:
timer
Pid:
11020,comm:
insmodTainted:
G---------------T2.6.32-279.el6.i686#1
CallTrace:
[]?
__setup_irq+0x2e3/0x320
[]?
request_threaded_irq+0x100/0x200
[]?
intr_handler+0x0/0x58[intr]
[]?
intr_init+0x0/0x6b[intr]
[]?
intr_init+0x2c/0x6b[intr]
[]?
do_one_initcall+0x2f/0x1c0
[]?
sys_init_module+0xb4/0x220
[]?
syscall_call+0x7/0xb
Theintervalbetweentwointerruptsis0
FailstoregisterIRQ0
IRQhandlertypemismatchforIRQ0
currenthandler:
timer
Pid:
11634,comm:
insmodTainted:
G---------------T2.6.32-279.el6.i686#1
CallTrace:
[]?
__setup_irq+0x2e3/0x320
[]?
request_threaded_irq+0x100/0x200
[]?
intr_handler+0x0/0x58[intr]
[]?
intr_init+0x0/0x6b[intr]
[]?
intr_init+0x2c/0x6b[intr]
[]?
do_one_initcall+0x2f/0x1c0
[]?
sys_init_module+0xb4/0x220
[]?
syscall_call+0x7/0xb
Theintervalbetweentwointerruptsis0
FailstoregisterIRQ0
IRQhandlertypemismatchforIRQ0
currenthandler:
timer
Pid:
12106,comm:
insmodTainted:
G---------------T2.6.32-279.el6.i686#1
CallTrace:
[]?
__setup_irq+0x2e3/0x320
[]?
request_threaded_irq+0x100/0x200
[]?
intr_handler+0x0/0x58[intr]
[]?
intr_init+0x0/0x6b[intr]
[]?
intr_init+0x2c/0x6b[intr]
[]?
do_one_initcall+0x2f/0x1c0
[]?
sys_init_module+0xb4/0x220
[]?
syscall_call+0x7/0xb
Theintervalbetweentwointerruptsis0
FailstoregisterIRQ0
IRQhandlertypemismatchforIRQ0
currenthandler:
timer
Pid:
12576,comm:
insmodTainted:
G---------------T2.6.32-279.el6.i686#1
CallTrace:
[]?
__setup_irq+0x2e3/0x320
[]?
request_threaded_irq+0x100/0x200
[]?
intr_handler+0x0/0x58[intr]
[]?
intr_init+0x0/0x6b[intr]
[]?
intr_init+0x2c/0x6b[intr]
[]?
do_one_initcall+0x2f/0x1c0
[]?
sys_init_module+0xb4/0x220
[]?
syscall_call+0x7/0xb
Theintervalbetweentwointerruptsis0
FailstoregisterIRQ0
Theintervalbetweentwointerruptsis0
eth0RequestonIRQ9succeeded
The1interruptshappenedonirq9Theintervalbetweentwointerruptsis55119
FreeingIRQ9
评语:
指导老师(签名):