内核如何通知用户空间程序发生中断

时间:2012-10-15 15:36:36

标签: linux interrupt

我正在编写用户空间程序和内核空间设备驱动程序。

目标:一旦发生中断,用户空间程序需要快速执行某些操作。

我天真的方法:用户空间程序使用ioctl调用wait_event_interruptible(),内核ISR调用wake_up_interruptible()来唤醒用户空间程序。事实证明,从中断到用户空间需要花费太多时间。

还有更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

这里有一个类似的问题:

Notify gpio interrupt to user space from a kernel module

请检查以上问题。但是,我可以提供我在那里建议的方法。

您可以从内核API向用户空间线程发送信号,这可以帮助您运行非阻塞:

send_sig(int sig, struct task_struct *p, int priv);

您需要了解内核中用户线程的pid。您可以通过/ proc编写用户进程的pid然后读取pid的内核来实现此目的。通过这种安排,当存在中断时,内核可以向用户线程发送信号。如果您的进程重新启动或被杀死,您将必须通过proc更新pid。仅用于状态通知,您可以使用此方法;但是,如果您想传输数据以及状态而不是Netlink或char驱动程序机制是好方法。