资源描述:
《linux内核模块中 软中断的 例子.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、直接上例子吧。只是捕获某个设备的中断而已。。。该文件的名字是irq.cviewplaincopytoclipboardprint?#include#include#include#include#include#defineDEBUG#ifdefDEBUG#defineMSG(message,args...)printk(KERN_DEBUG"irq:"message,##args)#else#defineMSG(message,arg
2、s...)#endifMODULE_LICENSE("GPL");MODULE_AUTHOR("silence1214");intirq;char*interface;//下面这2个参数通过插入内核模块的时候赋值的...module_param(irq,int,0644);module_param(interface,charp,0644);//中断捕获的时候的处理函数intirq_handle_function(intirq,void*device_id){staticintcount=1;MSG("[%d]receivetheirqat%ld...",count,jiffies);co
3、unt++;returnIRQ_NONE;}intinit_module(){//注册中断捕获,第三个参数的意思是和其他设备共享该中断号,最后一个参数是设备的id,其实对于共享下的设备这个号码据说是随便写,一般都写irq的了。//只要注册成功就可以等待对应设备的该中断号的到来就可以处理回调函数了。。if(request_irq(irq,irq_handle_function,IRQF_SHARED,interface,(void*)&irq)){MSG("registirqfailure...");return-EIO;}MSG("interface=%sandirq=%d...",i
4、nterface,irq);MSG("registirqsuccess...");return0;}voidcleanup_module(){free_irq(irq,&irq);MSG("unregistirq...");}#include#include#include#include#include#defineDEBUG#ifdefDEBUG#defineMSG(message,args...)printk(KERN_D
5、EBUG"irq:"message,##args)#else#defineMSG(message,args...)#endifMODULE_LICENSE("GPL");MODULE_AUTHOR("silence1214");intirq;char*interface;//下面这2个参数通过插入内核模块的时候赋值的...module_param(irq,int,0644);module_param(interface,charp,0644);//中断捕获的时候的处理函数intirq_handle_function(intirq,void*device_id){staticintcount=1
6、;MSG("[%d]receivetheirqat%ld...",count,jiffies);count++;returnIRQ_NONE;}intinit_module(){//注册中断捕获,第三个参数的意思是和其他设备共享该中断号,最后一个参数是设备的id,其实对于共享下的设备这个号码据说是随便写,一般都写irq的了。//只要注册成功就可以等待对应设备的该中断号的到来就可以处理回调函数了。。if(request_irq(irq,irq_handle_function,IRQF_SHARED,interface,(void*)&irq)){MSG("registirqfailure..
7、.");return-EIO;}MSG("interface=%sandirq=%d...",interface,irq);MSG("registirqsuccess...");return0;}voidcleanup_module(){free_irq(irq,&irq);MSG("unregistirq...");}对应的makefile的内容是viewplaincopytoc