gpt4 book ai didi

android - 什么是/sys/class/gpio/export 和 `/sys/class/gpio/unexport 机制以及底层 sysfs 功能是什么?

转载 作者:行者123 更新时间:2023-12-04 15:18:55 25 4
gpt4 key购买 nike

在 Android 和 Linux 下使用传统的 sysfs GPIO 过程的第一步是脚趾 export您要使用的特定 GPIO 引脚。当您完成 GPIO 引脚到 unexport它。
我一直在寻找关于 export 的解释。 command 实际上做了但是我发现的一切都是关于内置的 bash与 GPIO 无关的命令。
然后我意识到命令行的实际命令是echo 938 > /sys/class/gpio/export/sys/class/gpio/export是文件夹 /sys/class/gpio 中的特殊设备文件.
我发现的唯一评论表明将 GPIO 引脚号写入 /sys/class/gpio/export导致与该 GPIO 引脚关联的 GPIO 特殊文件“导出到用户空间”,然后允许用户应用程序使用指定的 GPIO 引脚和文件 I/O 到特殊设备文件。
GPIO Sysfs Interface for Userspace

“export” …

Userspace may ask the kernel to export control of a GPIO to userspaceby writing its number to this file.

Example: “echo 19 > export” will create a “gpio19” node for GPIO #19,if that’s not requested by kernel code.

“unexport” …

Reverses the effect of exporting to userspace.

Example: “echo 19 > unexport” will remove a “gpio19” node exportedusing the “export” file.


所以如果我指定 echo 938 > /sys/class/gpio/export然后是一个特殊的设备文件夹 /sys/class/gpio/gpio938带有特殊设备文件 /sys/class/gpio/gpio938/value/sys/class/gpio/gpio938/direction被创建。当我做 echo 938 > /sys/class/gpio/unexport那么那些特殊的设备文件被删除了吗?
在研究如何在 Android 5.1 下将 GPIO 引脚与 DragonBoard 410C 一起使用时,我正在学习有关此设备的在线类(class),据说将以下几行添加到启动初始化脚本中。
set -A pins 938 915 1017 926 937 930 914 971 901 936 935
for i in 0 1 2 3 4 5 6 7 8 9 10
do
echo ${pins[i]} > /sys/class/gpio/export;
chmod 777 /sys/class/gpio/gpio${pins[i]};
chmod 777 /sys/class/gpio/gpio${pins[i]}/value;
chmod 777 /sys/class/gpio/gpio${pins[i]}/direction;
done
我的理解是,这些命令为 GPIO 引脚 938、915、1017、926、937、914、901、936、935 创建特殊设备文件,以便应用程序可以读取和写入这些 GPIO 引脚以执行诸如转动通过写入值来打开和关闭 LED,例如 /sys/class/gpio/gpio938/value .
我对这个启动初始化脚本的理解是,这消除了用户使用 sudo 的需要。命令与每个 shell 命令行一起执行,以便用户在运行使用 sysfs 访问 GPIO 引脚的应用程序之前执行这些命令.真的吗?
我的问题
这些特殊设备文件是什么 /sys/class/gpio/export/sys/class/gpio/unexport以及它们如何连接到 Linux 内核中的某种功能,该功能在 /sys/class/gpio 中创建和销毁特殊设备文件文件夹?
对引导初始化脚本的建议更改是表示任何人都可以访问的 GPIO 管脚的特殊设备文件,因此应用程序可以只使用这些管脚而无需打扰 export。或 unexport ?用户应用程序只需对特殊设备执行读/写操作,而无需使用 sudo echo 938 > /sys/class/gpio/export第一的?
启动初始化脚本创建的这些特殊文件的访问和共享权限是什么?多个应用程序可以同时操作相同的 GPIO 引脚吗?

最佳答案

/sys/class/gpio 中的伪文件是内核接口(interface)中函数调用的相当薄的包装器。内核文档 [1] 中有一条关于导入/导出功能目的的线索:

After a kernel driver requests a GPIO, it may only be made availablein the sysfs interface by gpiod_export(). The driver can controlwhether the signal direction may change. This helps drivers preventuserspace code from accidentally clobbering important system state.

This explicit exporting can help with debugging (by making some kindsof experiments easier), or can provide an always-there interfacethat’s suitable for documenting as part of a board support package.


因此,本质上,此功能的存在是为了防止用户空间应用程序粗心地践踏 I/O 设备的状态。我不知道它在实践中有多有用。
[1] https://www.kernel.org/doc/html/latest/admin-guide/gpio/sysfs.html

关于android - 什么是/sys/class/gpio/export 和 `/sys/class/gpio/unexport 机制以及底层 sysfs 功能是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63769403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com