我想使用 Python 模块与 GPIO 引脚进行交互阿布利布。我想在没有 root 权限的情况下执行此操作。我该如何实现?
当我创建一个ablib.Pin
实例时,模块会打开/sys/class/gpio/export
并将引脚号写入其中。最初这会引发 IOErro:
IOError: [Errno 13] Permission denied: '/sys/class/gpio/export'
这个问题可以通过 轻松解决chmod
。现在,当我创建一个ablib.Pin
实例时,我在另一个文件上得到了一个 IOError:
IOError: [Errno 13] Permission denied: '/sys/class/gpio/pioC16/direction'
ls -la
关于/sys/class/gpio
退货:
--w------- 1 my_user my_user 4096 Jan 1 01:42 export
lrwxrwxrwx 1 root root 0 Jan 1 01:42 pioC16 -> ../../devices/ahb.0/apb.1/pinctrl.2/fffff800.gpio/gpio/pioC16
当将 115 写入 时/sys/class/gpio/export
,内核会创建符号链接/sys/class/pioC16
。问题是root
是此链接的所有者。我希望新创建的文件归 拥有my_user
。但我不知道该怎么做。我试过chmod
和chown
:
$ chown -R my_user:my_user /sys/class/gpio
$ chmod g+s /sys/class/gpio
我也试过了ACL
。但根据这问题看起来我不能使用 ACL sysfs
。
$ setfacl -m group:my_group:rwx /sys/class/gpio
setfacl: /sys/class/gpio: Invalid argument
有人知道如何解决这个问题吗?
答案1
这已得到答复这里。
本质上,编辑文件/etc/udev/rules.d/99-com.rules
并附加:
SUBSYSTEM=="gpio*", PROGRAM="/bin/sh -c 'chown -R root:gpio /sys/class/gpio && chmod -R 770 /sys/class/gpio; chown -R root:gpio /sys/devices/virtual/gpio && chmod -R 770 /sys/devices/virtual/gpio'"
然后将您的用户添加到“gpio”组:
sudo usermod -a -G gpio <youruser>
重启后,您应该能够以普通用户身份读取和写入 /sys/class/gpio。我刚刚自己这样做了,效果很好。
答案2
链接的权限并不是那么重要......
目标的许可是!!
请在“../../devices/ahb.0/apb.1/pinctrl.2/fffff800.gpio/gpio/pioC16”上执行 ls -la