Доступ к 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.