As permissões padrão e a propriedade dos arquivos /sys/class/gpio/ podem ser definidas, por exemplo, configurando o udev? O objetivo seria ter um guia real para processos que podem acessar os pinos GPIO em uma placa.
A maioria das "soluções" inclui invólucros suid,roteiros com chowne binários intermediários confiáveis. Pesquisas na web aparecemtentativas fracassadas de escrever regras do udev.
(relacionado:1º trimestre)
Responder1
Eu adicionei o /etc/udev/rules.d/99-gpio.rules para definir todas as permissões de maneira correta e limpa:
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"
Responder2
Para execução do Ubuntu.
sudo apt install rpi.gpio-common
Responder3
Eu uso isso (assumindo que o grupo gpio já foi criado):
/etc/udev/rules.d/99-gpio.rules
SUBSYSTEM=="gpio", KERNEL=="gpiochip*", GRUPO:="gpio", MODO:="0660"
Responder4
A interface GPIO parece ter sido construída apenas para uso do sistema (uid root) e não possui os recursos que uma interface /dev teria para processos do usuário. Isso inclui permissões de criação.
Para permitir o acesso aos processos do usuário (incluindo daemons e outros serviços do sistema), as permissões precisam ser concedidas por um processo raiz em algum momento. Pode ser um script de inicialização, um intermediário ou um comando manual (sudo).