中断处理和用户空间通知

Yur*_*uri 3 linux linux-device-driver linux-kernel

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

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

如果你能提供一些有用的例子,那就太好了.

提前致谢.

eep*_*epp 12

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

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

# echo 23 > /sys/class/gpio/export
Run Code Online (Sandbox Code Playgroud)

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

设定方向:

# echo in > /sys/class/gpio/gpio23/direction
Run Code Online (Sandbox Code Playgroud)

如果硬件GPIO控制器支持中断生成,驱动程序也应支持它,您将看到/sys/class/gpio/gpio23/edge.无论是写rising,fallingboth将此文件指示信号边沿(S),这将创建一个"用户空间中断".现在,要中断,请使用poll(2)系统调用/sys/class/gpio/gpio23/value.然后,当poll调用解除阻塞时,读取新的值(/sys/class/gpio/gpio23/value),它将是'0''1'(ASCII).