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?
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.
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.
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.
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.
Wie K.B. sagte, auf modernen Linux-Systemen gibt es für sowas die udev-Konfigurationsdateien.
Sven B. schrieb: > Wie K.B. sagte, auf modernen Linux-Systemen gibt es für sowas die > udev-Konfigurationsdateien. Für /sys ?
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 /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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.