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