Fragen zur Entwicklung eines eigenen Treibers unter Debian

  • Hallo,


    ich möchte mir einen kleinen Treiber entwickeln, habe aber noch Anfangsprobleme mit der Umgebung, bzw. mit der Handhabung der Tuhls.


    Um die Schnittstellen kennen zu lernen, habe ich erstmal einen existierenden Treiber kopiert und ausgebeint. Übersetzen hat geklappt, aber das Laden nach Umkopieren nach /usr/lib/... geht (natürlich?) nicht.
    Schätze es liegt daran, dass der neue Treiber nicht in den Symbolen aufgeführt ist.


    Frage(n):
    - muss ich bei jeder Treiberänderung den kompletten Kernel neu bauen?
    - wie bringe ich dem Kernel bei, dass er meinen Treiber beim Bau berücksichtigt?
    - Falls ich nicht jedesmal den gesamten Kernel bauen muss, wie bringe ich dem Kernel bei, dass er das Module doch bitte kennen (lernen?) und dann auch laden soll?!?


    Ach ja, den kernel baue ich mit make-kpkg ...


    Bin für jeden Tip dankbar.


    Gruß Geronimo

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • Zitat

    Original von geronimo
    - muss ich bei jeder Treiberänderung den kompletten Kernel neu bauen?
    - wie bringe ich dem Kernel bei, dass er meinen Treiber beim Bau berücksichtigt?
    - Falls ich nicht jedesmal den gesamten Kernel bauen muss, wie bringe ich dem Kernel bei, dass er das Module doch bitte kennen (lernen?) und dann auch laden soll?!?


    1. nein
    2. indem du den treiber auch in die Makefiles einfügst. wenn du das korrekt machst, kannst du ihn dann auch bei "make menuconfig" anwählen.
    3. das automatische laden wird über die major- und minor-id der device-files geregelt. dafür ist der kerneld zuständig. mittlerweile wird das aber glaube ich komplett über udev geregelt.

  • Ich häng mich hier mal mit dran, da meine Frage zum Threadthema passt:


    Und zwar bin ich dabei ein paar Änderungen an einem Framebuffer-Treiber vorzunehmen. Namentlich den viafb.
    Soweit ist das auch nicht das riesen Problem.
    Hilfreich wäre aber eine Art Framebuffer-Treiber-Entwicklungs-Howto. Also was ist zu beachten. Wie funktionier die Paramterübernahme an das Modul (genau das macht nämlich im Moment Probleme) usw. usf.
    Gibt es sowas?

  • Hallo slime,


    dank Dir für die Tips! - Hat ein bisserl gedauert, bis ich gemerkt habe, dass der Eintrag im makefile nicht reicht ... ;)
    Jedenfalls inzwischen hat es mit dem Übersetzen geklappt und ich habe gemerkt, dass ich in einem Treiber bereits zu tief im System bin. Muss mir also was Anderes einfallen lassen.


    Kann mir jemand sagen, wie ich den Superblock eines eingebundenen Dateisystems (bzw. die Entsprechung aus VFS) auslesen kann? Ich will nix verändern, ein readonly-Zugriff würde mir reichen. Ich habe die Funktion get_super() in fs.h gefunden, aber die ist ja für den Kernel reserviert. Gibt es eine Wrapperfunktion, die ich "außerhalb" des Kernels verwenden kann?
    Oder kann ich die Funktion verwenden, wenn ich ein Kernelmodul baue?


    Habe zwar schon einiges an Info über VFS und so gefunden, aber irgendwo fehlt mir noch ein Stück :gap


    Gruß Geronimo

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • a) UNBEDINGT http://lwn.net/Kernel/LDD3/ zu Gemüte führen - ist auch für Umme ;)


    b) ich würde mich für die Zeit der Entwicklung mal von Distri-Tools und riesigen Build-Skripten "freimachen" ;)


    c) auch der Kernel und seine Treiber enthält Dokumentation - wird gerne übersehen.


    arghgra

  • Hallo,


    vielen Dank für die guten Tips! Die haben mich schon ein ganzes Stück weiter gebracht.
    Inzwischen habe ich die Entwicklungsumgebung soweit, dass ich nimmer nach einem make booten muss und übersetzen und installieren über make läuft. Damit kann ich loslegen :)


    Zitat

    a) UNBEDINGT http://lwn.net/Kernel/LDD3/ zu Gemüte führen - ist auch für Umme


    Ich habe zwar die Erstausgabe in Papierform und irgendein update blockierte wertvollen Plattenplatz - aber Du hast Recht - das "aktuelle" Buch bringt schon mehr Info mit.


    Zitat

    auch der Kernel und seine Treiber enthält Dokumentation - wird gerne übersehen.


    Hm - Du meinst außer dem Quältext?


    Habe zwar entdeckt, dass mir noch einige manpages gefehlt hatten und dass ich per xman auch manpages lesen kann, von denen ich garnicht wußte, dass es sie gibt, aber wirklich weiter gebracht hat es mich noch nicht. Wenn es da noch Meer gibt, würde ich mich über einen Link o.ä. freuen.


    Die "linux kernel internals" habe ich nur für den 2.4er gefunden und das was ich suche steht natürlich auch nicht drin.


    Immerhin bin ich inzwischen soweit, dass ich weiß, wie ich mein Problem aufteilen müsste, aber die Informationsbeschaffung ist (mal wieder) viel komplexer ist, als mein eigentliches "Problem".


    Zitat

    ich würde mal nachsehen, wie fsck(.ext3) das so macht.


    Hat sich fast erübrigt, da ich inzwischen den Unterschied zwischen userspace und kernelspace glaube verstanden zu haben. Damit dürfte die Kommunikation zwischen beiden auch klar sein ...


    Was ich noch nicht gefunden habe, ist eine Übersicht, analog zu man(2), der verwendbaren Kernelfunktionen. Habe inzwischen viel gelesen, was mich weder interessiert, noch weiterbringt, aber für die richtige Glühbirne habe ich den Schalter noch nicht gefunden.


    Z.B. glaube ich verstanden zu haben, dass wenn eine Anwendung eine Systemfunktion aufruft, die zur Ausführung von Modulcode führt, letzterer im Prozesskontext der Anwendung läuft. Wie finde ich aber den Benutzerkontext der Anwendung raus, wenn ich mich im Modul "befinde"? Wenn ich im Modul einen eigenen Thread erstelle, habe ich natürlich den Prozesskontext für den Thread, aber wenn ich nur aufgerufen werde ...
    ... oder wenn ich in Sektion 2 von man eine Funktion finde, die ich gern verwenden würde, wie finde ich die entsprechende Kernelfunktion?
    ... oder wie ich ne eigene Funktion aus dem Modul als Systemfunktion veröffentlichen kann.


    Dafür fehlen noch ein paar Beispiele :O

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • Hallo Firefly,


    danke für den Nasenstubser ;)


    Das Verzeichnis war mir in der Tat völlig neu. Allerdings scheint es identisch mit dem linux-doc-Paket von debian zu sein. Mit dem Vorteil, dass man es im linux-Baum besser/schneller lesen kann.
    Habe auch festgestellt, dass ich schon wieder zu selektiv gelesen habe. Muss erstmal meine Hausaufgaben machen - sprich die Einführung von vorne lesen.


    Dank Euch allen für die Unterstützung.


    Gruß Gero

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!