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

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

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

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

有没有更好的方法?

谢谢!

最佳答案 这里有一个类似的问题:

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驱动程序机制是好方法.

点赞