如何从内核驱动程序中断用户空间应用程序?

时间:2018-09-29 12:47:25

标签: c linux-kernel linux-device-driver

我正在编写一个设备驱动程序,该设备驱动程序接收来自硬件的中断。 (使用MSI的32个IRQ) 我想从驱动程序发出信号/中断打开设备文件的应用程序的事件。

我也许可以使用信号,但是我认为它并不是真正可靠且太慢。而且,只有2个SIGUSR。

我想避免增加开销。

我想避免它们,因为:

  • 信号:不够可靠且延迟时间长
  • netlink:高延迟,异步并可能丢失数据包
  • 轮询/读取/ ioctl:需要使用pthread和无限循环

当前,我使用ioctl / read / write syscalls.read/write syscalls交换数据。

从内核驱动程序中断事件/向用户空间应用程序发送信号的最佳实践是什么?

该方法应支持许多中断/信号而不会丢失任何中断/信号,它必须可靠且快速。

基本上,我想将用户空间应用程序用作驱动程序中收到的中断的下半部分。 设备文件由唯一的应用打开。

0 个答案:

没有答案