我想构建一个内核模块,当有f5
键击键时它将运行一个tasklet。
我了解如何初始化一个tasklet,但是如何在我的模块中获取该事件?如何使用request_irq
确定是否按下f5
?
答案 0 :(得分:1)
-
嗨,0x90,
我想你知道,要处理一个中断,有两个部分。 第一部分,上半部分,即中断处理程序, 第二部分,下半部分,可能是softirq,tasklet,work queue。
因此,即使你想在tasklet中实现你想要的所有东西,你也必须确保上半部分,即中断处理程序,有机会先运行。
IIRC,tasklet只是softirqs的变种,它们在irq_exit()中处理,在do_IRQ()中调用。但是,这种流程可能取决于具体的结构。
对于您的问题,我猜它可能在x86平台上。 无论按下什么键,总会有一个键盘中断传递给CPU。 无论按下的键是f5,都会在你的tasklet中检查,你的中断处理程序可能只需要将代码传递给tasklet。
因此,您应该通过调用request_irq()将您在tasklet之前处理的中断处理程序附加到键盘中断。
更新
正如Probie所说,您可能需要检查Documentation /目录中的notifier.txt和notifiers.txt。
感谢。