2015-06-19 5 views
8

Der /sys/class/gpio kann standardmäßig nur als root zugreifen. So mag ich, dass eine neue Gruppe gpio die Dateien und Verzeichnisse unter /sys/class/gpio verwenden kann. Um das zu erreichen, dass ich die folgenden Zeilen /etc/rc.local (Ich bin auf Debian) hinzugefügt:Greifen Sie auf GPIO (/ sys/class/gpio) als nicht-root zu

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

So gibt diese Schreibberechtigungen für alle gpio Gruppenmitglieder. So können sie nun Pins pinsieren und exportieren.

Das Problem ist, dass sie die spezifischen Pin-Dateien nach dem Export (e.x. /sys/class/gpio/gpio17) nicht lesen/schreiben können, da diese wieder im Besitz von root:root sind. Wie kann ich ändern, dass sie standardmäßig als root:gpio erstellt werden? Ich meine, ich kann das jedes Mal manuell machen, wenn ich einen Pin exportiere. Aber das ist ein bisschen unkomfortabel.

UPDATE

Nach larsks' Antwort habe ich die fehlende Regeldatei. Jetzt funktioniert es teilweise:

-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 

Aber für die ./gpio17/ ich noch root:root erhalten:

-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

Okay, ich das Problem gelöst. Weil ich Raspbian über den RaspbianInstaller installiert habe, bin ich nie durch das raspi-config Tool gegangen. Dies scheint ein Problem zu sein. Weil mir auch der Ordner /sys/device/virtual/gpio/ fehlte.

Ich folgte diesen Leitfaden hier: http://www.element14.com/community/message/139528/l/re-piface-digital-2--setup-and-use#139528

Und danach die Berechtigungen korrekt waren (auch für die Pin-Ordner und die Dateien value, direction, ...).

Antwort

8

Sie können dies unter Verwendung der Regeln tun, die Aktionen definieren können, die ausgeführt werden, wenn der Kernel neue Geräte instanziiert. Aktuelle Versionen der Raspbian Verteilung für Raspberry Pi-Geräte enthalten im Anschluss an die in /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'" 

Dies stellt sicher, dass die Einträge unter /sys/class/gpio immer zur Verfügung stehen, um die Mitglieder der gpio Gruppe:

# 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 

aktualisieren

Die Berechtigungen sind auch für die einzelnen Pins korrekt:

# 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

Danke für Ihre Antwort. Aber dann kann ich zum Beispiel nicht in '/ sys/class/gpio/gpio11/value' schreiben. Alle Dateien in '/ sys/class/gpio/gpio11 /' gehören immer noch zu 'root: root' und nicht wie' (un) export' zu 'root: gpio'. – TiMESPLiNTER

+0

Natürlich können Sie. Diese udev-Regel führt rekursive Änderungen an '/ sys/class/gpio' durch; Ich habe die Antwort mit dem Inhalt des 'gpio11'-Verzeichnisses aktualisiert. Hast du es versucht und hast es versagt? – larsks

+0

Ja, ich habe es ausprobiert. Und für dein aktualisiertes 'ls -Ll' sehe ich' root: root' und nicht wie du 'root: gpio'. Aber es funktioniert für '/ sys/class/gpio/*'. Das Exportieren von Pins ist nun möglich, funktioniert aber danach nicht mehr. – TiMESPLiNTER

Verwandte Themen