我有一个带有 Ubuntu 18.04 和专用内核的 up2board,因此我可以使用该板的特定硬件,例如 LED。我使用以下命令打开这些 LED:
$ sudo -i
$ cd /sys/class/gpio
$ echo 432 > export
$ cd gpio432
$ echo "out" > direction
$ echo 1 > value
现在,我想弄清楚两件事:
命令如何
echo 1 > value
从用户空间传播到驱动程序。如何找出负责此 LED 支持的驱动程序。
答案1
非常简单地说:
中的条目/sys
并不是真正的文件。这个挂载的类型是sysfs
,在内核中这对应于一个 API,内核的其他部分可以在其中注册自己。然后,当读取或写入该文件系统的“文件”时,sysfs 将这些操作转发给注册的模块。
gpio
内核的(通用 I/O)层又是一个抽象层,其他驱动程序可以在其中注册。通常,这些是芯片或芯片组的驱动程序,芯片本身具有 GPIO 寄存器。这些芯片的 GPIO 引脚如何接线取决于硬件。
更多信息可以在Documentation/gpio/gpio.txt
内核源代码等中找到。
至于识别驱动程序的方法,一种方法是ll gpio432
在创建 gpio 节点后查看符号链接;它将指向具有带有 GPIO 寄存器的芯片/芯片组的设备。然后查找该设备的驱动程序。
另一种方法是查看dmesg
驱动程序在注册 GPIO 时是否产生消息。
也许这些信息也可以通过 访问udevadm
。