我为gpios分配了多个已注册的中断,并在用户空间中进行了应用。如何通知应用程序发生了中断以及发生了哪个中断?
可能fasync适用于该目标,但是我可以找到示例如何将信息从中断处理程序发送到用户空间应用程序。
如果您可以提供一些有用的示例,那将很好。
提前感谢。
您不需要高级内核来进行用户空间通信。用户空间应用程序可以使用Sysfs访问GPIO。在Documentation/gpio.txt
中阅读它。
首先,像这样导出GPIO引脚(实际数量取决于您的设置):
Documentation/gpio.txt
这将导出GPIO引脚#23,从而创建# echo 23 > /sys/class/gpio/export
。
设置方向:
/sys/class/gpio/gpio23
如果硬件GPIO控制器支持中断生成,驱动程序也应该支持中断,并且您会看到# echo in > /sys/class/gpio/gpio23/direction
。将/sys/class/gpio/gpio23/edge
,rising
或falling
写入此文件以指示将产生“用户空间中断”的信号沿。现在,要被中断,请使用both
上的poll(2)
系统调用。然后,当poll(2)
调用解除阻塞时,读取新值(/sys/class/gpio/gpio23/value
),它将是poll
或/sys/class/gpio/gpio23/value
(ASCII)。
dinesh提供了eepp提出的解决方案的C实现,它要求应用程序位于poll()中。
这里是C ++实现,它抽象了此功能,并提供了回调/中断功能。注意使用回调函数作为参数的GPIO构造函数。这提供了OP所需的功能。
'0'