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


von Lars (Gast)


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

von Klaus W. (mfgkw)


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:
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.)

von Lars (Gast)


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

von Klaus W. (mfgkw)


Lesenswert?

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

von Klaus W. (mfgkw)


Lesenswert?

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

von Silvan K. (silvan) Benutzerseite


Lesenswert?


von Georg A. (Gast)


Lesenswert?

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

von Imon (Gast)


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.

von Imon (Gast)


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.

von Georg A. (Gast)


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 ;)

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.