【问题标题】:How to init a tasklet after a keystroke interrupt?击键中断后如何初始化小任务?
【发布时间】:2012-08-13 09:34:28
【问题描述】:

我想构建一个内核模块,当有f5键击键时,它将运行一个tasklet。

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

【问题讨论】:

  • 你必须使用request_irq吗? register_keyboard_notifier 不是更有用吗?

标签: linux linux-kernel embedded-linux kernel-module


【解决方案1】:

-

嗨,0x90,

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

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

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

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

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

更新:

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

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 2011-10-11
    • 2021-08-06
    相关资源
    最近更新 更多