将用户空间操作与内核代码相关联

将用户空间操作与内核代码相关联

我有一个带有 Ubuntu 18.04 和专用内核的 up2board,因此我可以使用该板的特定硬件,例如 LED。我使用以下命令打开这些 LED:

$ sudo -i
$ cd /sys/class/gpio
$ echo 432 > export
$ cd gpio432
$ echo "out" > direction
$ echo 1 > value

现在,我想弄清楚两件事:

  1. 命令如何echo 1 > value从用户空间传播到驱动程序。

  2. 如何找出负责此 LED 支持的驱动程序。

答案1

非常简单地说:

中的条目/sys并不是真正的文件。这个挂载的类型是sysfs,在内核中这对应于一个 API,内核的其他部分可以在其中注册自己。然后,当读取或写入该文件系统的“文件”时,sysfs 将这些操作转发给注册的模块。

gpio内核的(通用 I/O)层又是一个抽象层,其他驱动程序可以在其中注册。通常,这些是芯片或芯片组的驱动程序,芯片本身具有 GPIO 寄存器。这些芯片的 GPIO 引脚如何接线取决于硬件。

更多信息可以在Documentation/gpio/gpio.txt内核源代码等中找到。

至于识别驱动程序的方法,一种方法是ll gpio432在创建 gpio 节点后查看符号链接;它将指向具有带有 GPIO 寄存器的芯片/芯片组的设备。然后查找该设备的驱动程序。

另一种方法是查看dmesg驱动程序在注册 GPIO 时是否产生消息。

也许这些信息也可以通过 访问udevadm

相关内容