我对驱动程序 gpio_keys 感到困惑。该驱动程序区分两种类型的按钮:
仅 IRQ 按钮和 GPIO 驱动按钮
谁能解释一下两者之间的区别吗?
答案1
免责声明:我还没有阅读最新的gpio_keys
代码,只是浏览了一下。然而,我相信对于 GPIO 键与 IRQ 的分离有一个很好的解释。
内核有一个 IRQ 事件表,因此可以为已知的 IRQ 赋予不同的事件。事件列表(回调,实际上是指针)被写入 PIC(单独的芯片或集成在 CPU 中),当给定的中断发生时,执行上下文进入事件函数。这些函数需要很小,这样中断内就不会浪费太多时间。
但这里真正重要的是(除非CPU被指示暂时忽略中断)内核将响应每个中断。
对于响应式应用程序,您希望连接到 GPIO 引脚的东西能够产生中断(即类似于 IRQ)。然而,在某些应用程序中,您可能并不关心按钮的每次点击或连接到 GPIO 引脚的任何状态的每次变化。一个例子是传感器,您希望每半秒测量一次。您不希望传感器在“按下”时告诉内核,您希望用户空间应用程序每半秒戳一次内核以告诉它传感器的当前状态。不难想象一个传感器暴露了一个看起来像按钮的界面,几乎任何只有两种状态(例如带有阈值的暗/亮)的传感器都可以看起来像一个按钮。