Kernel之共享中断
背景
最近有个测试用例的需求,是关于中断管理的。
在现有的硬件基础上,实现以下功能:
缺省情况下提供默认的中断处理程序
能使能和屏蔽某一特定中断
后面用共享中断实现了这个测试用例
共享中断
有时候多个设备可能共享一根硬件中断线,在现实应用场景中广泛存在,特别像PCI控制器,GPIO等,所以内核提供了这种中断共享的机制。
下面是中断共享的使用及注意点:
共享中断的多个设备在申请中断时,都应加上 IRQF_SHARED 标志,而且一个设备以IRQF_SHARED申请某中断成功的前提是该中断未被申请,或该中断虽然被申请了,但是之前申请该中断的所有设备也都以IRQF_SHARED标志申请该中断。
尽管内核模块可访问的全局地址都可以作为request_irq(…,void*dev_id)的最后一个参数dev_id,但是设备结构体指针显然是可传入的最佳参数。
在中断到来时,会遍历执行共享此中断的所有中断处理程序,直到某一个函数返回IRQ_HANDLED。在中断处理程序顶半部中,应根据硬件寄存器中的信息比照传入的dev_id参数迅速地判断是否为本设备的中断,若不是,应迅速返回IRQ_NONE,如下图所示。
作者: Shell