中断处理和用户空间通知

我有几个注册的中断分配给gpios和应用程序在用户空间。 如何通知应用程序发生的中断以及哪个中断?

可能的同步适用于这个目标,但是我可以find如何将信息从中断处理程序发送到用户空间应用程序的示例。

如果你能提出一些有用的例子,这将是很好的。

提前致谢。

Solutions Collecting From Web of "中断处理和用户空间通知"

用户空间通信不需要花哨的内核。 用户空间应用程序可以使用Sysfs访问GPIO。 在Documentation/gpio.txt阅读它。

首先,像这样输出一个GPIO引脚(实际数量取决于您的设置):

 # echo 23 > /sys/class/gpio/export 

这将导出GPIO引脚#23,从而创建/sys/class/gpio/gpio23

设定方向:

 # echo in > /sys/class/gpio/gpio23/direction 

如果硬件GPIO控制器支持中断产生,驱动程序也应该支持它,你会看到/sys/class/gpio/gpio23/edge 。 写入risingfallingboth到这个文件来指示信号边缘将创建一个“用户空间中断”。 现在,要中断,在/sys/class/gpio/gpio23/value上使用poll(2)系统调用。 然后,当poll调用解除阻塞时,读取新值( /sys/class/gpio/gpio23/value ),该/sys/class/gpio/gpio23/value将为'0''1' (ASCII)。

dinesh提供了eepp提出的解决方案的C实现,它要求poll()中的应用程序块。

下面是一个C ++实现,它抽象出这个功能,并提供回调/中断功能。 请注意将回调函数作为参数的GPIO构造函数。 这提供了OP所需的能力。

https://github.com/tweej/HighLatencyGPIO