Forum: Mikrocontroller und Digitale Elektronik RaspberryPi GPIOs ohne Rootrechte ansteuern


von Klaus (Gast)


Lesenswert?

Moin,

ich versuche gerade die GPIOs meines RaspberryPi anzusteuern (mit C als 
Programmiersprache).
Zwei Möglichkeiten hab ich mir bisher genauer angeschaut. Einmal per 
direktem zugriff auf die IO Register über /dev/mem, zum anderen mit der 
WiringPi Library. Beides braucht aber leider root Rechte. Ich werde 
garantiert nicht meine Anwendungen (die auch aus dem Webserver nachher 
ansprechbar sein sollen) alle unter root laufen lassen.

Ich kenn mich mit Linux noch nicht so im Detail aus. Kennt jemand einen 
Weg, die GPIOs aus einem C-Programm so anzusprechen, dass das Programm 
keine rootrechte braucht?

von Simon S. (-schumi-)


Lesenswert?

Du könntest via chmod das schreiben und lesen der entsprechenden Files 
für jeden erlauben.

Eine noch bessere Lösung wäre, dein Webserver-User (und dich selbst, 
wirst es ja auch mal ausprobieren wollen) in eine Gruppe aufzunehmen, 
die Schreib/Leserechte auf den GPIOs hat. Falls es da noch keine gibt, 
erstellst du eben eine neue Gruppe und erlaubst wieder fia chmod das 
schreiben/lesen für diese Gruppe auf die GPIOs.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Soweit ich weiß, bieten der Kernel auch Schnittstellen im 
/dev-Verzeichnis, die Du auch als normaler Nutzer ansprechen kannst. Es 
ist möglich, dass die Devices noch mit mkdev anlegen musst oder gar ein 
passendes Kernel-Modul bauen und einbinden musst.

von K. B. (Gast)


Lesenswert?

Christian H. schrieb:
> dass die Devices noch mit mkdev anlegen musst oder gar ein
> passendes Kernel-Modul bauen und einbinden musst.

Weiß nicht wie das beim Raspberry Pi so ist, aber i.d.R. übernimmt das 
heutzutage udev.

von Mac (Gast)


Lesenswert?

Die GPIO werden können über das /sys Dateisystem angesteuert werden. 
Entsprechende Beispiele sind hier (Für BASH Shell z.B.):

http://elinux.org/RPi_Low-level_peripherals

Die Berechtigungen in sys... können per chmod geändert werden. Du 
schreibst ein Skript das beim Systemstart die Berechtigungen setzt, so 
dass dein Prozess drauf zugreifen kann und die benötigten GPIO anmeldet.

Falls das aus Timing-Gründen nicht geht und du direkt schalten willst, 
dann kannst du einen Service schreiben. Der läuft als root und nimmt per 
UNIX Domain Socket Kommandos an, welche die benötigten Schaltsequenzen 
ausführen.

von Sven B. (scummos)


Lesenswert?

Wie K.B. sagte, auf modernen Linux-Systemen gibt es für sowas die 
udev-Konfigurationsdateien.

von root (Gast)


Lesenswert?

Sven B. schrieb:
> Wie K.B. sagte, auf modernen Linux-Systemen gibt es für sowas die
> udev-Konfigurationsdateien.

Für /sys ?

von Mac (Gast)


Lesenswert?

Ja, mit udev geht das auch, ist aber z.T. fummelscheiss:

http://www.raspberrypi.org/phpBB3/viewtopic.php?f=29&t=9667

Ich würde chmod machen und fertig.

von Sven B. (scummos)


Lesenswert?

Von /sys hab ich keine Ahnung ;)
Aber udev ist die "richtige" Methode. chmod geht wahrscheinlich auch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.