1

我想构建一个内核模块,它会在按键时运行一个小任务f5

我了解如何初始化 tasklet,但是如何在我的模块中获取事件?如何request_irq判断是否f5被按下?

4

1 回答 1

1

-

嗨,0x90,

我想你知道,要处理中断,有两个部分。第一部分,上半部分,即中断处理程序,第二部分,下半部分,可能是softirq,tasklet,工作队列。

所以,即使你想在一个小任务中实现你想要的一切,你也必须确保上半部分,即中断处理程序,有机会首先运行。

IIRC,tasklet 只是 softirqs 的一种变体,它们在 irq_exit() 中处理,在 do_IRQ() 中调用。但是,此流程可能取决于特定的架构。

对于您的问题,我想它可能在 x86 平台上。无论按下什么键,总会有一个键盘中断传递给 CPU。并且按下的键是否为 f5,将在您的 tasklet 中进行检查,您的中断处理程序可能只需将代码传递给 tasklet。

因此,您应该通过调用 request_irq() 将在 tasklet 之前处理的中断处理程序附加到键盘中断。

更新:

正如 Probie 所说,您可能需要检查 Documentation/ 目录中的 notifier.txt 和 notifiers.txt。

谢谢。

于 2012-08-13T01:24:56.283 回答