Kapitel 6. Fortgeschrittene Treiberentwicklung

Inhaltsverzeichnis
6.1. Zunächst die Übersicht
6.2. Interruptbetrieb
6.3. Softirqs
6.3.1. Tasklets
6.3.2. Timer-Funktionen
6.4. Kernel-Threads
6.4.1. Workqueues
6.4.2. Event-Workqueue
6.5. Kritische Abschnitte sichern
6.5.1. Atomare Operationen
6.5.2. Semaphore
6.5.3. Spinlocks
6.5.4. Sequencelocks
6.5.5. Interruptsperre und Kernel-Lock
6.5.6. Synchronisiert warten
6.5.7. Memory Barriers
6.5.8. Fallstricke
6.6. Vom Umgang mit Zeiten
6.6.1. Relativ- und Absolutzeiten
6.6.2. Zeitverzögerungen

Die in Einfache Treiber vorgestellten Treiberfunktionen ermöglichen bereits die Integration des Treibers in den Kernel und den applikationsseitigen Zugriff auf Geräte. In dem folgenden Kapitel geht es noch tiefer in die Kernelprogrammierung: Es sollen Techniken vorgestellt werden, die es zulassen, Treiberfunktionen unabhängig von der darüber liegenden Applikation im Kernel abarbeiten zu lassen.

Diese Funktionalität wird benötigt, wenn die Hardware neue Zustände über Interrupts signalisiert (Interruptbetrieb) und wenn länger andauernde Berechnungen mit hoher Priorität – durchaus auch periodisch – abgearbeitet werden müssen. Wie hochpriore, zeitkritische Treiberfunktionen auf Basis so genannter Softirqs programmiert werden, ist Thema von Kapitel Softirqs. Da die erwähnten Technologien im Interrupt-Kontext stattfinden, sind passive Zeitverzögerungen (schlafen lassen) nicht nutzbar. In Kapitel Kernel-Threads werden Kernel-Threads vorgestellt, die dem Treiberentwickler volle Unterbrechbarkeit und damit das Schlafenlegen ermöglichen.

Der Einsatz solcher Techniken bringt nicht selten kritische Abschnitte mit sich, deren Absicherung alles andere als trivial ist. Tatsächlich ist der Schutz kritischer Abschnitte zu einem zentralen Thema der zunehmend komplexer werdenden Gerätetreiber-Entwicklung geworden. Wie diese Stolperfalle professionell zu umgehen ist, wird im Anschluss (Kritische Abschnitte sichern) ausführlich erörtert. Das Kapitel behandelt abschließend den Umgang mit Zeiten (Vom Umgang mit Zeiten).

Damit sind Sie in der Lage, komplexe Treiber für Ein- und Mehrprozessorsysteme zu konzipieren und zu realisieren, die sich »harmonisch« in den Linux-Kernel einpassen.


Lizenz