2015-06-19 2 views
8

Доступ к /sys/class/gpio возможен только с правами администратора. Поэтому мне нравится, что новая группа gpio может использовать файлы и директории под /sys/class/gpio. Для достижения этой цели я добавил следующие строки /etc/rc.local (я на Debian):Доступ к GPIO (/ sys/class/gpio) как к некорневому корню

sudo chown root:gpio /sys/class/gpio/unexport /sys/class/gpio/export 
sudo chmod 220 /sys/class/gpio/unexport /sys/class/gpio/export 

Таким образом, это дает право на запись всех членов gpio группы. Таким образом, теперь они могут экспортировать и извлекать контакты отлично.

Проблема заключается в том, что они не могут читать/записывать конкретные файлы пинов после экспорта (e.x. /sys/class/gpio/gpio17) beacause, которые принадлежат root:root.

Как я могу изменить, что они созданы по умолчанию как root:gpio? Я имею в виду, что могу делать это вручную каждый раз, когда я экспортирую булавку. Но это немного неудобно.

UPDATE

Согласно ответу 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 

UPDATE 2

Хорошо, я решил проблему. Поскольку я установил Raspbian поверх RaspbianInstaller, я никогда не использовал инструмент raspi-config. Кажется, это проблема. Beacause Мне также не хватает папки /sys/device/virtual/gpio/.

Я после этого руководства здесь: http://www.element14.com/community/message/139528/l/re-piface-digital-2--setup-and-use#139528

, а затем разрешения были правильными (даже для пин-папок и файлов их value, direction, ...).

ответ

8

Вы можете сделать это с помощью правил 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 

Update

Разрешения указаны верно также для отдельных контактов:

# 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 
+0

Thx для вашего ответа. Но тогда я не могу написать, например, '/ sys/class/gpio/gpio11/value'. Все файлы в '/ sys/class/gpio/gpio11 /' по-прежнему принадлежат «root: root», а не '(un) export' от' root: gpio'. – TiMESPLiNTER

+0

Конечно, вы можете. Это правило udev выполняет рекурсивные изменения в '/ sys/class/gpio'; Я обновил ответ на то, как выглядит содержимое каталога 'gpio11'. Вы попробовали это и не смогли? – larsks

+0

Да, я пробовал. И для вашего обновленного 'ls -Ll' я вижу' root: root', а не как 'root': gpio'. Но он работает для '/ sys/class/gpio/*'. Таким образом, экспорт штифтов теперь возможен, но не работает с ними впоследствии. – TiMESPLiNTER

Смежные вопросы