中断处理和用户空间通知

时间:2013-10-08 20:24:25

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

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

可能fasync适用于此目标,但我可以找到如何从中断处理程序向用户空间应用程序发送信息的示例。

如果您能提供一些有用的例子,那将是件好事。

提前致谢。

2 个答案:

答案 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。将risingfallingboth写入此文件以指示将创建“用户空间中断”的信号边缘。现在,要中断,请使用/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所需的能力。

https://github.com/tweej/HighLatencyGPIO