【发布时间】:2014-04-15 00:46:35
【问题描述】:
根据内核文档,request_threaded_irq 用于将其分为两部分,irq_handler 检查中断是否来自设备。如果是,则需要禁用设备上的中断并返回IRQ_WAKE_THREAD,这将唤醒处理程序线程并运行@thread_fn。
但是我发现了一些代码寄存器中断,使用request_threaded_irq 同时将NULL 作为irq_handler 传递,它们在thread_fn 中保留了完整的功能。
所以我怀疑为什么我们在这种情况下使用request_threaded_irq(),而我们可以轻松使用request_irq,它在上述场景中的行为相同。
【问题讨论】:
-
request_irq先创建然后request_threaded_irq。而现代内核中的request_irq由request_threaded_irq包装,thread_fn为NULL以实现兼容性。见interrupt.h。
标签: linux-kernel kernel linux-device-driver interrupt