在将驱动程序从内核3.14移植到4.1时,我遇到了request_irq()的问题。我们的驱动程序正在使用与启动时首先出现的第三方驱动程序共享的IRQ。
当它在内核3.14上运行时,IRQ是静态的,可以使用request_irq()获取,如下所示:
request_irq(irq_number, irq_handler,
IRQF_SHARED | IRQF_TRIGGER_HIGH,
"irq name", device_context);
但是现在在内核4.1上,中断控制器正在使IRQ“虚拟化”,我不知道如何获取IRQ。这个中断控制器被第三方驱动程序使用,我甚至无法想到丢弃它并继续使用request_irq()
的旧方法。
从以下位置看不到新的“虚拟”IRQ:
cat /proc/interrupts
了(我觉得很好)。
我浏览网页寻找示例,例如我听说过irq_domain
。但是我对Linux集成的经验很少,以至于我试图弄清楚如何获得共享的虚拟IRQ。
如何处理共享的虚拟IRQ?