2017-10-02 3 views
0

Auf Himbeere pi 1, raspbian Stretch-lite Release 9.1 laufen - Kernel-Version 4.9.52+gpio Skript zurückgegeben verweigert die Erlaubnis, wenn durch den Benutzer auf gpio Gruppe Himbeere pi

Ich habe ein Shell-Programm leuchten eine führte über Himbeere pi's gpio (Dateiname ist led.sh). Es gibt einen Teil, wo ich mit einigen Dateien interagieren müssen:

function makeOn { 
    # status has value 1 if led is on and 0 if led is off 
    if [ $(status) -eq 1 ]; then 
    echo "led is already on" 
    else 
    #say we are using pin 18 and set it to output mode 
    echo "18" > /sys/class/gpio/export 
    echo "out" > /sys/class/gpio/gpio18/direction # this is line 38 

    # write output 
    echo "1" > /sys/class/gpio/gpio18/value # this is line 41 
    echo "led is on" 
    fi 
} 

ich dies als einen Benutzer in der gpio Gruppe leite. Dies sind die Dateien, die ich zu verwirren versuchen mit in meinem Programm:

enter image description here

enter image description here

Dies ist, was passiert, wenn ich led.sh laufen:

enter image description here

Die seltsame Die Sache ist, ich habe diese Befehle auf der Shell nacheinander ausgeführt und kein Problem. Aber wenn ich ein Skript verwende, das sie aufruft, bekomme ich eine Erlaubnis verweigert, obwohl ich in der GPIO-Gruppe bin. Zuerst dachte ich, dass die Shell Befehle als spezieller Benutzer ausführen könnte, und prüfte, indem ich an der led.sh an mehreren Stellen ein Echo $ EUID hinzufügte und sie alle meine Benutzer-ID zurückgaben.

Warum hat dieses Programm die Berechtigung für diese Dateien verweigert und wie kann ich das zulassen/beheben?

+0

Haben Sie Ihr Skript als ausführbar markiert? h. chmod + x led.sh kann helfen. Wenn dies behoben wird, lösche bitte dieses Q, da es jeden Tag gefragt wird; - /. Viel Glück. – shellter

+0

@shellter Das ist nicht das Problem, danke für den Kommentar. – secknv

Antwort

0

Also habe ich einige Experimente und hier ist, was ich habe:

Zuerst dachte ich über so etwas wie chmod 777 auf das Problem tun Dateien nur zum Testen, und dann erinnerte ich mich, das würde nicht funktionieren, weil diese Dateien sind erstellt, wenn der Pin in echo "18" > /sys/class/gpio/export exportiert wird.

Also dachte ich, dass das Problem sein könnte und fügte eine sleep 0.1 nach ihm hinzu, so dass das System Zeit hat, "um die Erlaubnis der Datei richtig zu erstellen und festzulegen". Es funktioniert jetzt.

0

Wie wäre es mit einem sleep direkt nach gpio/export?

echo "18" > /sys/class/gpio/export 
sleep 0.1 

Es scheint ein Timing-Problem zu sein.