我有几个注册的中断分配给gpios,以及应用程序在用户空间。 如何通知应用程序有关发生的中断和有哪些中断?
可能fasync适用于此目标,但我可以找到如何从中断处理程序向用户空间应用程序发送信息的示例。
如果您能提供一些有用的例子,那将是件好事。
提前致谢。
答案 0 :(得分:12)
您不需要花哨的内核来进行用户空间通信。用户空间应用程序可以使用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
。将rising
,falling
或both
写入此文件以指示将创建“用户空间中断”的信号边缘。现在,要中断,请使用/sys/class/gpio/gpio23/value
上的poll(2)
系统调用。然后,当poll
调用取消阻止时,请读取新值(/sys/class/gpio/gpio23/value
),该值将为'0'
或'1'
(ASCII)。
答案 1 :(得分:0)
dinesh提供了eepp提出的解决方案的C实现,它要求在poll()中使用应用程序块。
这是一个C ++实现,它抽象了这个功能,并提供了回调/中断功能。请注意GPIO构造函数,它将回调函数作为参数。这提供了OP所需的能力。