Можно ли задать разрешения по умолчанию и владельца файлов /sys/class/gpio/, например, настроив udev? Смысл в том, чтобы иметь реальный gid для процессов, которые могут получить доступ к контактам GPIO на плате.
Большинство «решений» включают в себя 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) команда.