默认情况下,/sys/class/gpio
只能作为 root
访问。所以我喜欢一个新组gpio
可以使用/sys/class/gpio
下的文件和目录。为此,我将以下行添加到 /etc/rc.local
(我在 Debian 上):
sudo chown root:gpio /sys/class/gpio/unexport /sys/class/gpio/export
sudo chmod 220 /sys/class/gpio/unexport /sys/class/gpio/export
因此,这为所有 gpio
组成员提供了写入权限。所以他们现在可以export
和unexport
pin 了。
问题是在 export
(例如 /sys/class/gpio/gpio17
)之后他们无法读取/写入特定的 pin 文件,因为这些文件归 root:root
再次。
如何更改它们也默认创建为 root:gpio
?我的意思是每次导出 pin 时我都可以手动执行此操作。但这有点不舒服。
更新
根据 larsks 的回答,我创建了丢失的规则文件。现在它部分起作用了:
-rwxrwx--- 1 root gpio 4096 Jun 19 16:48 export
lrwxrwxrwx 1 root gpio 0 Jun 19 16:51 gpio17 -> ../../devices/soc/3f200000.gpio/gpio/gpio17
lrwxrwxrwx 1 root gpio 0 Jun 19 16:45 gpiochip0 -> ../../devices/soc/3f200000.gpio/gpio/gpiochip0
-rwxrwx--- 1 root gpio 4096 Jun 19 16:45 unexport
但是对于 ./gpio17/
我仍然得到 root:root
:
-rw-r--r-- 1 root root 4096 Jun 19 16:52 active_low
lrwxrwxrwx 1 root root 0 Jun 19 16:52 device -> ../../../3f200000.gpio
-rw-r--r-- 1 root root 4096 Jun 19 16:52 direction
-rw-r--r-- 1 root root 4096 Jun 19 16:52 edge
drwxr-xr-x 2 root root 0 Jun 19 16:52 power
lrwxrwxrwx 1 root root 0 Jun 19 16:52 subsystem -> ../../../../../class/gpio
-rw-r--r-- 1 root root 4096 Jun 19 16:52 uevent
-rw-r--r-- 1 root root 4096 Jun 19 16:52 value
更新 2
好的,我解决了这个问题。因为我在 RaspbianInstaller 上安装了 Raspbian,所以我从未使用过 raspi-config
工具。这似乎是一个问题。因为我还缺少 /sys/device/virtual/gpio/
文件夹。
我在这里遵循了这个指南:https://community.element14.com/products/raspberry-pi/f/forum/26425/piface-digital-2---setup-and-use#139528
然后权限是正确的(甚至对于 pin 文件夹及其文件 value
,direction
,...)。
最佳答案
4.x 内核的更常见规则如下
SUBSYSTEM=="gpio*", PROGRAM="/bin/sh -c 'find -L /sys/class/gpio/ -maxdepth 2 -exec chown root:gpio {} \; -exec chmod 770 {} \; || true'"
如果路径中有符号链接(symbolic link),初始答案中的规则将无法对导出的 gpio 进行 chown
UPD 请记住,当您通过 sysfs 导出某些 GPIO 时,您应该等待 udev 规则触发并完成,然后才能获得所需的访问权限。对我有用的是在尝试访问 GPIO 文件之前睡大约 100 毫秒。
关于bash - 以非 root 身份访问 GPIO (/sys/class/gpio),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30938991/