2015-06-19 14 views
8

Domyślnie /sys/class/gpio ma dostęp tylko jako root. Więc podoba mi się, że nowa grupa może używać plików i katalogów pod /sys/class/gpio. Aby to osiągnąć dodałem następujące linie do /etc/rc.local (jestem na Debianie):Dostęp do GPIO (/ sys/class/gpio) jako niezasadowy

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

Więc to daje uprawnienia do zapisu do wszystkich członków grupy gpio. Dzięki temu mogą teraz eksportować i importować szpilki w porządku.

Problem polega na tym, że po wyeksportowaniu nie można odczytać/zapisać konkretnych plików PIN (np.

Jak mogę zmienić również to, że są one domyślnie tworzone jako root:gpio? Mam na myśli to, że mogę to zrobić ręcznie za każdym razem, gdy eksportuję pinezkę. Ale to trochę niewygodne.

UPDATE

Według odpowiedź larsks' Stworzyłem brakujący plik reguł. Teraz częściowo działa:

-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 

Ale dla ./gpio17/ ja wciąż 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

Ok I rozwiązać problem. Ponieważ zainstalowałem Raspbian na RaspbianInstaller, nigdy nie przeszedłem narzędzia raspi-config. To wydaje się być problemem. Beacause również brakowało folderu /sys/device/virtual/gpio/.

ja po tej instrukcji tutaj: http://www.element14.com/community/message/139528/l/re-piface-digital-2--setup-and-use#139528

a potem uprawnienia były prawidłowe (nawet dla pin-folderów i ich plików value, direction, ...).

Odpowiedz

8

Możesz to zrobić, używając reguł udev, które definiują akcje, które będą wykonywane, gdy jądro utworzy nowe urządzenia. Aktualne wersje dystrybucji urządzeń Raspberry Pi Raspbian zawierać następujące w /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'" 

Gwarantuje to, że wpisy pod /sys/class/gpio są zawsze dostępne dla członków grupy 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 

Aktualizacji

Uprawnienia są również odpowiednie dla poszczególnych szpilek:

# 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 za odpowiedź. Ale nie mogę na przykład pisać do '/ sys/class/gpio/gpio11/value'. Wszystkie pliki w '/ sys/class/gpio/gpio11 /' nadal należą do 'root: root', a nie do' (un) export' przez 'root: gpio'. – TiMESPLiNTER

+0

Oczywiście, że możesz. Ta reguła udev wykonuje rekursywne zmiany w '/ sys/class/gpio'; Zaktualizowałem odpowiedź, jak wygląda zawartość katalogu 'gpio11'. Spróbowałeś i sprawiłeś, że to się nie udawało? – larsks

+0

Tak, wypróbowałem to. I dla twojego zaktualizowanego 'ls -Ll' widzę' root: root', a nie jako 'root: gpio'. Ale działa dla '/ sys/class/gpio/*'. Eksport szpilek jest teraz możliwy, ale nie działa z nimi później. – TiMESPLiNTER