在没有 root 权限的情况下在 Python 中使用 /sys/class/gpio/

在没有 root 权限的情况下在 Python 中使用 /sys/class/gpio/

我想使用 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。但我不知道该怎么做。我试过chmodchown

$ 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

相关内容