mikrocontroller.net

Forum: PC-Programmierung C Linux Kernel Modul User eingabe? /dev/xxx


Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin Moin,


ich baue mir gerade einen PWM Baustein in C für ein Linux RTAI System.

Der Code läuft auch so weit mit festen werten nur stehe ich nun vor dem 
Problem wie bekomme ich eine User eingabe in das Kernel Modul???

Ich habe im Netz ein kleines Muster gefunden und zwar kommen die daten 
über /dev/xxx, aber ich verstehe nicht genau wie ich das einbauen 
sollte.

Kann mir evtl jemand da einen Tip geben??


Lars

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus der Entfernung und ohne die näheren Umstände zu kennen:
Es wird vermutlich nicht /dev/xxx sein, sondern irgendwas anders in 
/dev.
Als erstes musst du also herausfinden, wie es genau heisst.

Angenommen, es ist wirklich /dev/xxx, dann musst du in deinem
C-Programm wohl die "Datei" /dev/xxx öffnen, also etwas
aufrufen in der Art:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
...
    int mein_fd_fuer_usereingabe = open( "/dev/xxx", O_RDONLY );
    if( -1==mein_fd_fuer_usereingabe )
    {
      // Fehlerbehandlung...
    }
    else
    {
       // alles klar, geht weiter
       ...
       // wenn fertig, kann man die Datei schliessen:
       close( mein_fd_fuer_usereingabe ); mein_fd_fuer_usereingabe = -1;
    }

Wenn soweit alles klar ist, kannst du mit read() lesen.

Siehe:
man 2 open
man 2 read

(Zumindest vermute ich das so, weil das ein gängiger Weg
ist zur Dateibehandlung unter Unix.)

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mh ja evtl habe ich mich falsch ausgedrückt...

also ich habe ein Kernel Modul was eine PWM 0-100% erzeugt...

Nun möchte ich dem Modul einen Parameter übergeben z.b 50%

echo "50" > /dev/pwm0

So habe ich mir das gedacht??

Oder wie kann ich sonst Parameter in das Laufende Modual bekommen?



Lars

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ähnlich könnte das gehen.
Wo kommt denn das Modul her?
Gibt es Doku dazu? Dann vielleicht mal die lesen...

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder willst du wissen, wie man die "50" von einem eigenen
Programm aus in die /dev/pwm0 bekommt?

Autor: Silvan König (silvan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Georg A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ioctls sind für sowas sehr praktisch. Sowohl im Kerneltreiber als auch 
auf Userspaceseite sehr einfach zu machen

Autor: Imon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lars schrieb:
> ich baue mir gerade einen PWM Baustein in C für ein Linux RTAI System.
>

Okay watt willst du uns damit sagen ?  du hast ein PWM Baustein oder ein 
µC denn du unter C so Programmiert hast das er als PWM Funktioniert?
Drück dich bitte etwas klarer aus dann kann man dir helfen

> Der Code läuft auch so weit mit festen werten nur stehe ich nun vor dem
> Problem wie bekomme ich eine User eingabe in das Kernel Modul???
>
Hast du einen device Driver für das teil geschreiben oder hast du das 
über sowas aus den Userspache von Linux angesprochen, oder meinst du 
damit das die PWM in dein Device für sich genommen läuft ?

Normalerweise ist es so das man einen Device Treiber schreibt, dafür 
gibt es Literatur, das Buch linux device drivers in der 3 Auflage ist da 
zumbeispiel eine gute Basis.

Wenn  du sowas wie echo "50" /dev/pwm willst muss dein Treiber open und 
write mindesten unterstützen.

> Ich habe im Netz ein kleines Muster gefunden und zwar kommen die daten
> über /dev/xxx, aber ich verstehe nicht genau wie ich das einbauen
> sollte.

sehe dich mal unter /driver/hwmon um dort sind einige Komplexe treiber 
die PWM über das sysfs Interface machen, Diese sind zwar recht Groß und 
Komplex aber dafür ist die Steuerung über das sysfs recht trival.

> Kann mir evtl jemand da einen Tip geben??

Konkretisiere dein Vorhaben, sage uns über welche Magic sich deine PWM 
mit den µC unterhält auf denn das Linux Läuft ( SPI, CAN, I2C, Rs232, 
GPIO)
dann können wir dir sicher ein treiber nennen von denn du dich 
inspirieren lassen kannst oder ein Skeletton zur Verfügung stellen. 
Generell sind alle Trieber ähnlich gestrickt, Die stichworte für dich 
sind Char device und misc device, ich persönlich habe das Interface von 
misc device /driver/misc immer als recht einfach und schnell zu lernen 
empfunden.
Schön und Mainline tauglich wird es sicher wenn du denn Treiber unter 
driver/hwmon implementieren würdest.

vielleicht hilft es auch wenn du uns das gibst was du hast und wir sehen 
uns das mal gemeinsam an.

Autor: Imon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Georg A. schrieb:
> ioctls sind für sowas sehr praktisch. Sowohl im Kerneltreiber als auch
> auf Userspaceseite sehr einfach zu machen
>
 ja wollen aber Dokumentiert werden und gelten als obsoleted wenn schon 
dann das sysfs interface, das ist der Moderne neue Hippe weg sowas zu 
machen.

außerdem lassen sich ioctls schwer von der Kommandozeile rufen und 
manipulieren, ich glaube das war die Offizielle Begründung für das 
sysfs.

Autor: Georg A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> gelten als obsoleted wenn schon

Quack. sysfs ist gut für Sachen, die man ab und an konfigurieren muss 
und wo ein Wert auf einmal normalerweise ausreicht. Desweitern ist da 
jedesmal ASCII-Parsen angesagt. ioctls sind für Dauernutzung und man 
kann da ganze Strukturen ohne ASCII-Gefummel übergeben.

> außerdem lassen sich ioctls schwer von der Kommandozeile rufen

Es soll auch native Programme geben ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.