GPIO для Raspberry PI GPIO Group

Я взял образ для Ubuntu на Raspberry PI здесь https://ubuntu.com/download/raspberry-pi загрузил программу Python L928N через virtualenv в качестве ubuntu пользователь и получил ошибку. Я немного покопался, и некоторые тесты показали, что группа ubuntu не может получить доступ к / dev / gpiomem , который принадлежит root root

. Таким образом, у меня остался вариант: запустить мою программу python как root, но тогда virtualenv на самом деле не изолировал мои программы. Оказалось, что sudo извлекает все из глобальной настройки python root. Видя, как я запускаю пару проектов на Raspberry Pi, у которых они перекрываются, у меня могут возникнуть ночи разочарования, пытаясь понять, почему что-то сломалось (когда депо обновляется для одного проекта, а не для другого).

Итак, я создал / dev / gpiomem группу gpio , в которую входит пользователь ubuntu. Viola python, pip, virtualenv и мой проект работали без sudo в управляемом изолированном virtualenv!

Теперь, через пару дней, запустите программу, и она не работает. Оказывается, / dev / gpiomem вернулся к root root .

У меня есть следующие вопросы: A) есть ли лучший способ предоставить ubuntu доступ к / dev / gpiomem B) есть ли способ гарантировать, что группа останется прежней (при условии, что A - нет).

0
задан 25 April 2020 в 19:11

3 ответа

Я только что столкнулся с этим. Я добавил группу gpio и добавил root и моего пользователя в эту группу. Затем я скопировал правило udev 99-com.rules из образа raspbian. Перезагружаемся и все работает. Я вставил сюда файл правил для полноты картины. Вот как это делает фонд, поэтому он должен быть правильным. ;)

SUBSYSTEM=="input", GROUP="input", MODE="0660"
SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660"
SUBSYSTEM=="spidev", GROUP="spi", MODE="0660"
SUBSYSTEM=="bcm2835-gpiomem", GROUP="gpio", MODE="0660"

SUBSYSTEM=="gpio", GROUP="gpio", MODE="0660"
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;\
        chown -R root:gpio /sys$devpath && chmod -R 770 /sys$devpath\
'"

KERNEL=="ttyAMA[01]", PROGRAM="/bin/sh -c '\
        ALIASES=/proc/device-tree/aliases; \
        if cmp -s $ALIASES/uart0 $ALIASES/serial0; then \
                echo 0;\
        elif cmp -s $ALIASES/uart0 $ALIASES/serial1; then \
                echo 1; \
        else \
                exit 1; \
        fi\
'", SYMLINK+="serial%c"

KERNEL=="ttyS0", PROGRAM="/bin/sh -c '\
        ALIASES=/proc/device-tree/aliases; \
        if cmp -s $ALIASES/uart1 $ALIASES/serial0; then \
                echo 0; \
        elif cmp -s $ALIASES/uart1 $ALIASES/serial1; then \
                echo 1; \
        else \
                exit 1; \
        fi \
2
ответ дан 30 April 2020 в 13:31

Нет необходимости добавлять эти правила вручную.

sudo apt install rpi.gpio-common
0
ответ дан 28 January 2021 в 10:48

В Ubuntu вместо группы gpio добавьте пользователя в группу dialout, чтобы получить доступ к контактам GPIO.

(Это задокументировано в файле /usr/share/doc/rpi.gpio-common/README.Debian, который устанавливается пакетом rpi.gpio-common. )

Как указал 4xy, установка пакета rpi.gpio-common установит правила udev.

Мне пришлось перезагрузить Pi после установки rpi.gpio-common и добавления моего пользователя в группу dialout, после чего я смог получить доступ к контактам GPIO как обычно. Пользователь.


Подводя итог:

sudo apt install rpi.gpio-common
sudo adduser "${USER}" dialout
sudo reboot
4
ответ дан 3 February 2021 в 03:15

Другие вопросы по тегам:

Похожие вопросы: