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
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:
1 | #include <sys/types.h> |
2 | #include <sys/stat.h> |
3 | #include <fcntl.h> |
4 | #include <unistd.h> |
5 | ...
|
6 | int mein_fd_fuer_usereingabe = open( "/dev/xxx", O_RDONLY ); |
7 | if( -1==mein_fd_fuer_usereingabe ) |
8 | {
|
9 | // Fehlerbehandlung...
|
10 | }
|
11 | else
|
12 | {
|
13 | // alles klar, geht weiter
|
14 | ...
|
15 | // wenn fertig, kann man die Datei schliessen:
|
16 | close( mein_fd_fuer_usereingabe ); mein_fd_fuer_usereingabe = -1; |
17 | }
|
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.)
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
So ähnlich könnte das gehen. Wo kommt denn das Modul her? Gibt es Doku dazu? Dann vielleicht mal die lesen...
Oder willst du wissen, wie man die "50" von einem eigenen Programm aus in die /dev/pwm0 bekommt?
ioctls sind für sowas sehr praktisch. Sowohl im Kerneltreiber als auch auf Userspaceseite sehr einfach zu machen
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.
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.
> 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 ;)
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.