2015-06-19 33 views
8

/sys/class/gpio può accedere come root solo per impostazione predefinita. Quindi mi piace che un nuovo gruppo gpio possa utilizzare i file e le directory sotto /sys/class/gpio. Per raggiungere questo ho aggiunto le seguenti righe al /etc/rc.local (sono su Debian):Accesso GPIO (/ sys/class/gpio) come non root

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

Quindi questo dà i permessi di scrittura a tutti i membri del gruppo gpio. Così ora possono esportare e non esportare spille fini.

Il problema è che non riescono a leggere/scrivere i file pin specifici dopo l'esportazione (ad esempio /sys/class/gpio/gpio17) perché di proprietà di root:root.

Come posso cambiare che sono stati creati automaticamente come root:gpio? Voglio dire che posso farlo manualmente ogni volta che esporto un pin. Ma è un po 'scomodo.

UPDATE

Secondo la risposta larsks' ho creato il file regola mancante. Ora funziona in parte:

-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 

Ma per il ./gpio17/ ho ancora ottenere 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 ho risolto il problema. Poiché ho installato Raspbian su RaspbianInstaller, non ho mai utilizzato lo strumento raspi-config. Questo sembra essere un problema. Anche perché mancava la cartella /sys/device/virtual/gpio/.

ho seguito questa guida qui: http://www.element14.com/community/message/139528/l/re-piface-digital-2--setup-and-use#139528

e poi i permessi erano corrette (anche per le pin-cartelle ei file value, direction, ...).

risposta

8

È possibile eseguire questa operazione utilizzando le regole udev, che possono definire azioni da eseguire quando il kernel crea un'istanza di nuovi dispositivi. versioni correnti del Raspbian di distribuzione per dispositivi lampone Pi contiene quanto segue 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'" 

Questo assicura che le voci sotto /sys/class/gpio sono sempre disponibili per i membri del gruppo 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 

Aggiorna

I permessi sono corretti anche per i singoli pin:

# 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 per la vostra risposta. Ma per esempio non posso scrivere su/sys/class/gpio/gpio11/value'. Tutti i file in '/ sys/class/gpio/gpio11 /' sono ancora di proprietà di 'root: root' e non come' (un) export' di 'root: gpio'. – TiMESPLiNTER

+0

Certo che puoi. Questa regola di udev esegue modifiche ricorsive su '/ sys/class/gpio'; Ho aggiornato la risposta con l'aspetto del contenuto della directory 'gpio11'. Hai provato e hai fallito? – larsks

+0

Sì, l'ho provato. E per il tuo aggiornato 'ls -Ll' vedo' root: root' e non come tu 'root: gpio'. Ma funziona con '/ sys/class/gpio/*'. Quindi esportare i pin è ora possibile ma non funziona in seguito. – TiMESPLiNTER