干净地设置 GPIO 权限

干净地设置 GPIO 权限

是否可以设置 /sys/class/gpio/ 文件的默认权限和所有权,例如通过配置 udev?重点是为可以访问板上 GPIO 引脚的进程提供真正的 gid。

大多数“解决方案”包括 suid 包装器,带有 chown 的脚本和受信任的中间人二进制文件。网络搜索出现尝试编写 udev 规则失败

(有关的:Q1

(资源:怪胎,操作系统,乌德夫

答案1

我添加了 /etc/udev/rules.d/99-gpio.rules 以正确、干净地设置所有权限:

SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="gpio", MODE="0660"
SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", RUN+="/bin/sh -c 'chown root:gpio /sys/class/gpio/export /sys/class/gpio/unexport ; chmod 220 /sys/class/gpio/export /sys/class/gpio/unexport'"
SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add", RUN+="/bin/chown root:gpio /sys%p/active_low /sys%p/edge /sys%p/direction /sys%p/value", RUN+="/bin/chmod 660 /sys%p/active_low /sys%p/edge /sys%p/direction /sys%p/value"

答案2

对于Ubuntu运行。

sudo apt install rpi.gpio-common

答案3

我使用这个(假设 gpio 组已经创建):

/etc/udev/rules.d/99-gpio.rules

子系统==“gpio”,内核==“gpiochip *”,组:=“gpio”,模式:=“0660”

答案4

GPIO 接口似乎是专为系统(uid root)使用而构建的,不具有 /dev 接口用于用户进程的功能。这包括创建权限。

为了允许用户进程(包括守护进程和其他系统服务)访问,需要在某个时刻由根进程授予权限。它可以是初始化脚本、中间人或手动 (sudo) 命令。

相关内容