我有一个代码可以检测内核模块中的 GPIO 中断。现在,我正在寻找一种机制来在检测到内核模块的 gpio 中断时通知用户空间。与不同选项相比具有某些优点/缺点的任何示例/代码片段?我会很感激你的回应。
问问题
9908 次
3 回答
1
您可以:(1) 向用户应用程序发送信号,或 (2) 实现 file_operations->poll 方法,使用 poll_wait 和等待队列在中断发生时唤醒用户应用程序。
于 2013-11-08T08:24:46.133 回答
1
查看 GPIO 键盘驱动程序 ( drivers/input/keyboard/gpio_keys.c
)。这是您解决问题的一个很好的起点。
然后在用户空间中监听(例如一些阻塞读取,或者只是tail
为了测试)/dev/input/yourevent
事件。
于 2013-11-06T19:09:45.377 回答
1
您可以从内核 API 向用户空间线程发送信号,这可以帮助您运行非阻塞:
send_sig(int sig, struct task_struct *p, int priv)
但是有一个限制:你需要知道内核中用户线程的 pid。您可以通过 /proc 写入用户进程的 pid 然后内核读取 pid 来解决这个问题。通过这种安排,当有中断时,内核可以向用户线程发送信号。如果您的进程重新启动或被杀死,您将不得不通过 proc 更新 pid。
如果我是你,我宁愿这样做,除非我不想将数据从内核传输到用户。对于数据传输要求,我会使用 Netlink 或其他一些机制。
于 2013-11-07T00:01:14.500 回答