Interrupt handling and user space notification

后端 未结 2 2048
闹比i
闹比i 2021-01-01 06:31

I have several registered interrupts assigned to gpios, and application in user space. How to notify application about occurred interrupt and which interrupt there was?

2条回答
  •  一个人的身影
    2021-01-01 06:56

    You don't need fancy kernel to userspace communication. A userspace application has access to GPIOs using Sysfs. Read about it in Documentation/gpio.txt.

    First, export a GPIO pin like this (the actual number depends on your setup):

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

    This will export GPIO pin #23, and thus create /sys/class/gpio/gpio23.

    Set its direction:

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

    If the hardware GPIO controller supports interrupts generation, the driver should also support it and you will see /sys/class/gpio/gpio23/edge. Write either rising, falling or both to this file to indicate the signal edge(s) that will create a "userspace interrupt". Now, to get interrupted, use the poll(2) system call on /sys/class/gpio/gpio23/value. Then, when the poll call unblocks, read the new value (/sys/class/gpio/gpio23/value), which will be '0' or '1' (ASCII).

提交回复
热议问题