Linux-Treiber entwickeln (Quade/Kunst)
Zusammenfassung
„Linux-Treiber entwickeln – Eine systematische Einführung in Gerätetreiber für den Kernel 2.6” von Jürgen Quade und Eva-Katharina Kunst (dpunkt.verlag, 2006). Die vorliegende PDF enthält nur Kapitel 1 (Einleitung); es vermittelt die Grundbegriffe (Rolle von Treibern, Gerätezugriff als Dateizugriff), den Buchaufbau und Informationsquellen. Ergänzt LDD3 (Linux Device Drivers 3) um eine systematische Herangehensweise.
Inhalt
Rolle des Gerätetreibers
- Gerätetreiber = Teil des Betriebssystemkerns; zentrale Komponente für den Hardware-Zugriff. Er besteht aus Funktionen, die den Zugriff auf das Gerät steuern; pro Gerätetyp ein eigener Treiber.
- Unix bildet den Gerätezugriff auf Dateizugriff ab: Wer Dateien lesen/schreiben kann, kann auch Hardware ansprechen.
- Der Kernel verwaltet Ressourcen (Speicher, Port-Adressen, Interrupts, DMA-Kanäle), wenn sich der Treiber an die Konventionen hält: keine Doppelvergabe; bei abstürzender Applikation überführt er das Gerät in einen definierten, sicheren Zustand.
- Auch virtuelle Geräte sind sinnvoll:
/dev/zeroliefert Nullen,/dev/nullverwirft Daten (z. B. zum Filtern von Fehlerausgaben).
Voraussetzungen und Scope
- Unabdingbar: C-Kenntnisse, besonders Pointer und Funktionsadressen; vorteilhaft: Betriebssystem-Grundlagen (Prozess-Kontext, Interrupt-Level).
- Beispiele getestet mit Kernel 2.6.15 auf Debian/Kubuntu; Treiber hängen von der Kernel-Version ab, nicht von der Distribution. Gilt für UP und SMP sowie alle Einsatzfelder (Embedded bis Mainframe).
- Buchaufbau: Applikations-Interface → vom Aufrufkontext abhängige Treiberfunktionen → asynchrone Komponenten (Softirqs, Tasklets, Kernel-Threads, Workqueues) → Integration ins System → Block-/USB-/Netzwerktreiber, Async-IO → gutes Treiberdesign.
Informationsquellen (aus Kapitel 1)
- Skeleton-Treiber im Kernel-Quellcode als Ausgangsbasis:
drivers/net/pci-skeleton.c,drivers/net/isa-skeleton.c,drivers/video/skeletonfb.c,drivers/pci/hotplug/pcihp_skeleton.c,drivers/usb/usb-skeleton.c. - Kernel-Doku generieren:
make psdocs/make pdfdocs/make htmldocsin/usr/src/linux/; Ergebnis u. a.kernel-api,kernel-locking(Rusty Russell),writing_usb_driver,gadget. - Linux Cross-Reference (
lxr.linux.no) zum Durchsuchen des Quellcodes; Community: kernelnewbies.org, lwn.net (Kernel-News donnerstags), kernel.org, lkml.org. - Beispielcode und Errata zum Buch:
ezs.kr.hsnr.de/TreiberBuch/.
Quellen
raw/Linux-Treiber entwickeln.pdf– Buchauszug, Kapitel 1 „Einleitung” (dpunkt.verlag, ISBN 978-3-89864-392-4)