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/zero liefert Nullen, /dev/null verwirft 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 htmldocs in /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)

Verwandte Artikel