我有兴趣编写基本的 Linux 内核模块驱动程序。
当有新数据可用时,将触发外部引脚并调用 GPIO 中断。
该设备是基于 I2C 的,因此在触发后我希望可以访问该设备。我的困惑是我是否应该在 GPIO 中断处理程序中或其他时间进行 I2C 读取?我的理解是 GPIO 处理程序是一个阻塞中断,因此您希望尽快退出它。
触发 GPIO 后从内核空间读取 I2C 数据的正确方法是什么?
我的理解是 GPIO 处理程序是一个阻塞中断,因此您希望尽快退出它。
您的意见是正确的!中断处理程序应尽可能短且快,因为它们在同一 CPU 上禁用中断的情况下运行。如果您尝试在 GPIO 中断处理程序中进行 I2C 读取,您可以简单地推迟 I2C 读取操作(使用线程 IRQ 处理程序或通过工作队列调度工作)。