在2.4内核和2.6内核中都使用request_irq()函数来注册中断服务函数。在2.4内核中,需要包含的头文件是#include<linux/sched.h>,2.6内核中需要包含的头文件则是#include<linux/interrupt.h>。函数原型如下:
·2.4内核
intrequest_irq(unsignedintirq,void(*handler)(int,void*,structpt_regs*),unsignedlongfrags,constchar*device,void*dev_id);
·2.6内核
request_irq(unsignedintirq,irq_handler_thandler,unsignedlongflags,constchar*name,void*dev);参数说明:在发生对应于第1个参数irq的中断时,则调用第2个参数handler指定的中断服务函数(也就是把自定义的handler()中断服务函数注册到内核中)。第3个参数flags指定了快速中断或中断共享等中断处理属性。在2.6教新的内核里(我的是2.6.27~2.6.31),在linux/interrupt.h中定义操作这个参数的宏如下:
引用
/**Theseflagsusedonlybythekernelaspartofthe*irqhandlingroutines.**IRQF_DISABLED-keepirqsdisabledwhencallingtheactionhandler*IRQF_SAMPLE_RANDOM-irqisusedtofeedtherandomgenerator*IRQF_SHARED-allowsharingtheirqamongseveraldevices*IRQF_PROBE_SHARED-setbycallerswhentheyexpectsharingmismatchestooccur*IRQF_TIMER-Flagtomarkthisinterruptastimerinterrupt*IRQF_PERCPU-Interruptispercpu*IRQF_NOBALANCING-Flagtoexcludethisinterruptfromirqbalancing*IRQF_IRQPOLL-Interruptisusedforpolling(onlytheinterruptthatis*registeredfirstinansharedinterruptisconsideredfor*performancereasons)*/#defineIRQF_DISABLED0x00000020#defineIRQF_SAMPLE_RANDOM0x00000040#defineIRQF_SHARED0x00000080#defineIRQF_PROBE_SHARED0x00000100#defineIRQF_TIMER0x00000200#defineIRQF_PERCPU0x00000400#defineIRQF_NOBALANCING0x00000800#defineIRQF_IRQPOLL0x00001000
早期一点的2.6内核这里一般以SA_前缀开头,如:SA_INTERRUPT表示禁止其他中断;(对应于IRQF_DISABLED)SA_SHIRQ表示共享相同的中断号(对应于IRQF_SHARED)SA_SAMPLE_RANDOM此宏会影响到RANDOM的处理(对应于IRQF_SAMPLE_RANDOM)。第4个参数name通常是设备驱动程序的名称。改值用在/proc/interrupt系统(虚拟)文件上,或内核发生中断错误时使用,自定义“XXX”。第5个参数dev_id可作为共享中断时的中断区别参数,也可以用来指定中断服务函数需要参考的数据地址。返回值:函数运行正常时返回0,否则返回对应错误的负值。示例代码片段:
引用
irqreturn_txxx_interrupt(intirq,void*dev_id){…return(IRQ_HANDLED);}intxxx_open(structinode*inode,structfile*filp){if(!request_irq(XXX_IRQ,xxx_interruppt,IRQF_DISABLED,”xxx”,NULL)){/*正常注册*/}return(0);}
============================================================================
没有人会帮你一辈子,所以你要奋斗一生。
相关文章:
你感兴趣的文章:
- POJ 3321 Apple Tree 线段树+DFS
- 三菱PLC编程中的注意事项
- eBay店铺开通的规则是什么?需要遵守哪些规定?
- 什么是音响?音响和音箱的区别在哪?
- 电气识图的基本步骤
- 跑fpu蓝屏原因一览