Linux 中断检测时向用户空间发送异步事件

Linux 中断检测时向用户空间发送异步事件,linux,multithreading,event-handling,embedded-linux,kernel-module,Linux,Multithreading,Event Handling,Embedded Linux,Kernel Module,我在网上读到,你不能在用户空间注册中断。做类似事情的方法是- 1) 让Linux内核模块/驱动程序在中断检测时向用户空间发送异步事件 2) 在用户空间中有一个线程,在设备节点上轮询该事件 我已经编写了一个内核模块,它在GPIO引脚的上升沿上注册事件,现在我想把它传递给用户空间 有人能告诉我怎么做吗- 1) 将事件从内核空间发送到用户空间 2) 在用户空间中创建线程以轮询该事件 谢谢 您可以使用Netlink套接字将事件从内核空间发送到用户空间。然后,您可以在用户空间中生成一个线程来侦听此Netl

我在网上读到,你不能在用户空间注册中断。做类似事情的方法是- 1) 让Linux内核模块/驱动程序在中断检测时向用户空间发送异步事件 2) 在用户空间中有一个线程,在设备节点上轮询该事件

我已经编写了一个内核模块,它在GPIO引脚的上升沿上注册事件,现在我想把它传递给用户空间

有人能告诉我怎么做吗- 1) 将事件从内核空间发送到用户空间 2) 在用户空间中创建线程以轮询该事件


谢谢

您可以使用Netlink套接字将事件从内核空间发送到用户空间。然后,您可以在用户空间中生成一个线程来侦听此Netlink套接字。这可以使用用户空间应用程序中的
select()
epoll()
函数来完成。这是一个很好的参考

@Siddharth这可能也会有帮助。我想问一下,使用Netlink套接字是否比使用-send_sig(int sig,struct task_struct*p,int priv)更具优势@Siddharth Netlink套接字通过用于用户空间进程的标准套接字API和用于内核模块的特殊内核API,在两者之间提供全双工通信链路。它允许您通过套接字发送自定义消息。然而,使用
send_sig()
可能只允许您向用户空间进程发送有效信号。这完全取决于您的实现。@iqstatic-我想问您-是否有任何方法可以设置一个处理程序,当用户空间应用程序通过套接字从内核空间接收到消息时调用它,就像我们在内核空间中可以做的那样?@Siddharth By msg您是指信号还是像字符串一样的自定义消息?如果您需要向内核空间发送或从内核空间发送类似字符串的消息,Netlink是最佳解决方案。您可以直接创建套接字缓冲区并通过Netlink套接字发送。