如何将数据从中断处理程序传输到用户应用程序?

时间:2013-08-12 22:33:34

标签: c linux kernel driver interrupt

产生中断的设备由内核中的处理程序管理。我需要发送带有标志的消息,以便用户应用程序接收已发生中断的通知,从而可以执行过程。例如,唤醒进程。 我该怎么做?

2 个答案:

答案 0 :(得分:2)

恕我直言,POSIX风格的解决方案是编写一个接收内核中断的设备驱动程序。用户空间程序将打开一个设备文件和icoctl()或read(),阻塞直到至少一个事件到达。我建议,用户空间程序实际应该阅读更多:

  • 到目前为止已经发生了多少事件?)
  • 呼叫被阻止(例如,从设备读取时没有排队的事件)

这可以帮助您查看您的程序何时发生错误事件(例如,因为它在上一个周期中已被删除)。

答案 1 :(得分:2)

我更喜欢使用Netlink作为内核和用户空间之间的IPC。只需确保使用GFP_ATOMIC(在netlink_broadcast中)分配消息,以确保您不在irq中睡觉。查看Netlink教程{。{3}}。