Доступ к GPIO (/sys/class/gpio) как не root
на /sys/class/gpio
может быть только доступ как root по умолчанию. Так что мне нравится, что новая группа gpio
можно использовать файлы и Директории в /sys/class/gpio
. Для этого я добавил следующие строки в /etc/rc.local
(Я на Debian):
sudo chown root:gpio /sys/class/gpio/unexport /sys/class/gpio/export
sudo chmod 220 /sys/class/gpio/unexport /sys/class/gpio/export
это дает разрешения на запись для всех gpio
члены группы. Таким образом, теперь они могут экспортировать и неэкспортировать контакты.
проблема в том, что они не могут читать/писать определенные файлы pin после экспорта (e.X. /sys/class/gpio/gpio17
), потому что те принадлежат root:root
снова.
как я могу изменить, что они созданы по умолчанию как root:gpio
тоже? Я имею в виду, что могу делать это вручную каждый раз, когда я экспортирую pin-код. Но это немного неудобно.
обновление
согласно ответа larsks' я создал файл правил. Теперь он частично работает:
-rwxrwx--- 1 root gpio 4096 Jun 19 16:48 export
lrwxrwxrwx 1 root gpio 0 Jun 19 16:51 gpio17 -> ../../devices/soc/3f200000.gpio/gpio/gpio17
lrwxrwxrwx 1 root gpio 0 Jun 19 16:45 gpiochip0 -> ../../devices/soc/3f200000.gpio/gpio/gpiochip0
-rwxrwx--- 1 root gpio 4096 Jun 19 16:45 unexport
но ./gpio17/
Я все еще получаю root:root
:
-rw-r--r-- 1 root root 4096 Jun 19 16:52 active_low
lrwxrwxrwx 1 root root 0 Jun 19 16:52 device -> ../../../3f200000.gpio
-rw-r--r-- 1 root root 4096 Jun 19 16:52 direction
-rw-r--r-- 1 root root 4096 Jun 19 16:52 edge
drwxr-xr-x 2 root root 0 Jun 19 16:52 power
lrwxrwxrwx 1 root root 0 Jun 19 16:52 subsystem -> ../../../../../class/gpio
-rw-r--r-- 1 root root 4096 Jun 19 16:52 uevent
-rw-r--r-- 1 root root 4096 Jun 19 16:52 value
обновление 2
хорошо, я решил проблема. Поскольку я установил Raspbian над RaspbianInstaller, я никогда не проходил через . Кажется, это проблема. Потому что мне тоже не хватало .
я следовал этому руководству здесь: http://www.element14.com/community/message/139528/l/re-piface-digital-2--setup-and-use#139528
и после этого разрешения были правильными (даже для pin-папок и их файлов value
, direction
, ...).
2 ответов
вы можете сделать это с помощью udev
правила, которые могут определять действия для выполнения, когда ядро создает экземпляры новых устройств. Текущие версии Raspbian дистрибутив для устройств Raspberry Pi содержит следующее в /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'"
это гарантирует, что записи под /sys/class/gpio
всегда доступны для членов gpio
группа:
# ls -lL /sys/class/gpio/
total 0
-rwxrwx--- 1 root gpio 4096 May 6 23:36 export
drwxrwx--- 2 root gpio 0 Jan 1 1970 gpiochip0
-rwxrwx--- 1 root gpio 4096 May 6 23:37 unexport
# echo 11 > /sys/class/gpio/export
# ls -lL /sys/class/gpio/
total 0
-rwxrwx--- 1 root gpio 4096 May 6 23:37 export
drwxrwx--- 2 root gpio 0 May 6 23:37 gpio11
drwxrwx--- 2 root gpio 0 Jan 1 1970 gpiochip0
-rwxrwx--- 1 root gpio 4096 May 6 23:37 unexport
обновление
права доступа для отдельных контактов, так как хорошо:
# ls -Ll /sys/class/gpio/gpio11/
total 0
-rwxrwx--- 1 root gpio 4096 May 6 23:37 active_low
drwxr-xr-x 3 root root 0 May 6 23:36 device
-rwxrwx--- 1 root gpio 4096 May 6 23:37 direction
-rwxrwx--- 1 root gpio 4096 May 6 23:37 edge
drwxrwx--- 2 root gpio 0 May 6 23:37 subsystem
-rwxrwx--- 1 root gpio 4096 May 6 23:37 uevent
-rwxrwx--- 1 root gpio 4096 May 6 23:37 value
более распространенное правило для 4.х ядер будет выглядеть следующим образом
SUBSYSTEM=="gpio*", PROGRAM="/bin/sh -c 'find -L /sys/class/gpio/ -maxdepth 2 -exec chown root:gpio {} \; -exec chmod 770 {} \; || true'"
правило в начальном ответе не сможет отключить экспортированный gpio, если в пути есть символическая ссылка
UPD пожалуйста, имейте в виду, что при экспорте некоторых GPIO через sysfs, вы должны дождаться, пока правило udev сработает и завершится, прежде чем вы получите желаемые права доступа. То, что сработало для меня, это сон о 100ms, прежде чем пытаться получить доступ к файлам GPIO.