LEDs an GPIO über C ansteuern

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Nabend zusammen!

    Ich habe mit einer Steckplatine, 3 LEDs und 3 Widerständen einen einfachen Schaltkreis gebastelt und diesen auch schon mit wiringPi getestet. Es ist alles korrekt angeschlossen und funktioniert mit dem Befehl "gpio" auch einwandfrei.
    Nun wollte ich das Ganze mit einem C-Programm machen.

    Ich habe als Beispiel das C-Programm von dort übernommen:

    http://elinux.org/RPi_Low-level_peripherals#C

    Außerdem habe ich es so umgeschrieben das die Pins, an denen meine LEDs angeschlossen sind angesteuert werden sollten (18, 23 und 24). Nun, es sollte eigentlich alles korrekt sein.

    Mein Problem ist, dass ich in der Methode "setup_io()" hängen bleibe. Die Fehlermeldung "can't open /dev/mem" wird mir sobald ich das Programm starte angezeigt. Zunächst dachte ich, ich habe keine Berechtigung dazu, also habe ich mit "sudo chmod 755 dev" mir diese geholt, leider hat dies mein Problem nicht gelöst.

    Auch wenn ich hier im Forum nichts zu diesem Problem gefunden habe, hoffe ich nicht einen zweiten Thread zu diesem Thema eröffnet zu haben!

    Vielen Dank vorab schon mal!

    Grüße,

    vitali360

  • Hallo vitali360,

    Zitat

    Zunächst dachte ich, ich habe keine Berechtigung dazu, also habe ich mit "sudo chmod 755 dev" mir diese geholt, leider hat dies mein Problem nicht gelöst.

    Mit dem Befehl hast du nur die Rechte der Datei oder des Verzeichnisses geändert. Ich hoffe du hast die Rechte des /dev Verzeichnisses nicht verändert. Damit das Programm mit den Superuser-Rechten gestartet wird musst du dieses mit sudo aufrufen. Dann sollte das Programm auch auf /dev/mem zugreifen können.

    Gruß Georg

  • Hallo boandlkramer,

    doch genau das habe ich dann wohl gemacht... Ich habe gedacht ICH bekomme dann die Rechte und nicht das Verzeichnis...
    Der Aufruf mit sudo funktioniert leider auch nicht.
    Habe mir gerade den Wert, der "mem_fd" zugewiesen wird ausgeben lassen. Dieser ist -1, was bedeutet das ich die Datei nicht öffnen darf nehme ich an?

    Grüße,

    vitali 360


  • Ich meine ohne sudo, also direkt als root user einloggen
    "su root"

    So, gerade ein Root-Passwort festgelegt, neugestartet und mit dem Root-Account eingeloggt und tatsächlich - es läuft jetzt.
    Was mich aber stört ist, dass ich mich extra als Root anmelden muss, gibt es nicht eine Möglichkeit das Programm als normaler User zu starten?

    Grüße,

    vitali360

  • Moin alle zusammen,

    vitali360:
    Versuchs mal mit dem guten, alten s-Bit.

    Dazu brauchst Du allerdings auch root-Rechte, aber nur einmal.
    1. Einloggen auf dem PI als user pi
    2. "sudo bash" eingeben - das Passwort nach dem gefragt wird, ist das Passwort des Users pi.
    2. Auf der Kommandozeile "chown <programmname> root:root" eingeben.
    3. Auf der Kommandozeile "chmod +s <programmname> eingeben
    4. exit eintippen - Du solltest jetzt wieder einen normalen Shell-Prompt ($) statt des Hash-Zeichens (#) haben
    5. ls -l der Datei sollte in den Permissions so aussehen: -rwsr-sr-x 1 root root ..."

    Wenn Du jetzt das Programm aufrufst, sollte es auch als normaler Benutzer gehen.

    Achtung!
    Sobald Du das Programm irgendwohin kopierst oder sonstwie änderst, wird das s-Bit aus sicherheitsgründen wieder gelöscht und Du musst es wieder neu setzen (Punkt 3). Du wirst als "normaler" User beim nächsten Übersetzen ein Problem bekommen, denn Dir fehlen die Rechte das Programm neu zu erzeugen (also den Output). Das s-Bit also wirklich erst ganz zum Schluss setzen. Bis dahin, behaupte ich, muss das, wie von den beiden Vorrednern schon gesagt, mit sudo funktionieren. Oder Du musst eben immer die Rechte ändern - von Dir nach root + s-Bit und wieder zurück. Das wär mir allerdings zu blöd ;)

    Was mich ein bisschen irritiert ist die Tatsache, dass sudo <programm> nicht funktioniert.
    "su root" geht meines Wissens unter, zumindest Debian-Linux, nicht, da müsstest Du "sudo bash" eingeben - eben weil root ursprünglich kein Passwort hat. Das ist in Linux schon eine Weile so, und ich könnte mir vorstellen, dass das mit SELINUX zusammenhängt.
    Evtl. hast Du Dir mit dem Passwort jetzt ein anderes Ei gelegt.
    Ich würde das mit dem Passwort, wenn's mit s-Bit geht, sicherheitshalber wieder rückgängig machen.

    ciao,
    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!