Linux-Treiber Kernel-Modul bzw. binärer Treiber



  • Hallo ich lese mich gerade in die Treiberentwicklung unter Linux ein.
    Jetzt steht in dem Buch, dass einige Hersteller (NVIDIA macht sowas meine ich) die GPL umgehen, indem sie dynamisch gelinkte Treiber verwenden.

    Meine Frage ist jetzt: Was bedeutet das konkret? Werden da von dem "Open-Source-Treiber" sozusagen irgendwelche externen Programme aufgerufen, die dann ihrerseits die Funktionen im Modul aufrufen oder müssen Programme, die den Treiber verwenden wollen, diesen Binärtreiber ansprechen, der das dann an das Modul weiter reicht oder funktioniert das sonst wie?

    Irgendwie klingt das ein wenig danach, als würde man damit unnötig Umwege gehen.



  • Wade1234 schrieb:

    Hallo ich lese mich gerade in die Treiberentwicklung unter Linux ein.
    Jetzt steht in dem Buch, dass einige Hersteller (NVIDIA macht sowas meine ich) die GPL umgehen, indem sie dynamisch gelinkte Treiber verwenden.

    Dynamisch linken tut man gegen Userspace-Bibliotheken. Das Interface zum Kernel wird entweder über Syscalls oder über ioctls etabliert.

    Hier ist, was Firmen machen, die Kernel-Module bereitstellen wollen, ohne ihren Quellcode offen legen zu müssen:
    Sie haben einen Blob, ein binäres Objekt, welches z.B. direkt für die Ansteuerung der Hardware verantwortlich ist. Linux hat kein stabiles ABI innerhalb des Kernels, weswegen für Kernelkonfigurationen in der Regel alle Module neu kompiliert werden müssen. Da Firmen das nicht können (für wie viele Konfigurationen wollen sie vorkompilierte Pakete anbieten? Was machen sie bei Leuten, die ihren Kernel selbst kompilieren?), kompilieren sie sog. Glue-Code, der mit dem ABI des Kernels kompatibel ist. Dieser Glue-Code ist quelloffen, kümmert sich um die Interaktion mit der Hardware und kann Kernel-Resourcen nutzen.

    Für das Kompilieren eines solchen Moduls sind nur die Kernel-Headerdateien und die Konfigurationsdatei des Zielsystems notwendig. Ändert sich der Kernel, muss das Glue-Modul neu kompiliert werden. Ist das API (nicht das ABI!) nicht kompatibel, kann auch nicht kompiliert werden. Ich erinnere mich noch vor Jahren, als ich Ubuntu verwendet habe, dass automatisch bei nVidia-Grafiktreiberupdates DKMS aufgerufen wurde, um das Glue-Modul für den derzeitigen Kernel bereitstellen zu können. Und manchmal waren die APIs nicht kompatibel, und der Glue-Code konnte nicht kompiliert werden.

    Wade1234 schrieb:

    Irgendwie klingt das ein wenig danach, als würde man damit unnötig Umwege gehen.

    Stimmt wohl. Aber was bleibt einem übrig? Wie geschrieben ist das ABI nicht stabil, und offenlegen kann/will man nicht.


Log in to reply