Linux-Treiber entwickeln Eine systematische Einführung in Gerätetreiber für den Kernel 2.6 von Jürgen Quade, Eva K Kunst überarbeitet Linux-Treiber entwickeln Quade / Kunst schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG dpunkt.verlag 2006 Verlag C.H. Beck im Internet: www.beck.de ISBN 978 3 89864 392 4 Inhaltsverzeichnis: Linux-Treiber entwickeln Quade / Kunst
Linux-Treiber entwickeln Eine systematische Einführung in Gerätetreiber für den Kernel 2.6 von Jürgen Quade, Eva K Kunst überarbeitet Linux-Treiber entwickeln Quade / Kunst schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG dpunkt.verlag 2006 Verlag C.H. Beck im Internet: www.beck.de ISBN 978 3 89864 392 4 Inhaltsverzeichnis: Linux-Treiber entwickeln Quade / Kunst
v Vorwort zur zweiten Auflage Mit Kernel 2.6.11 hat Linus Torvalds sein Entwicklungsmodell und auch die Versionierung des Linux-Kernels modifiziert. Statt einen separaten Entwickler-Kernel zu pflegen, lässt Torvalds neue Technologien direkt in den Standard-Kernel einfließen respektive entfernter Komponenten, wenn diese als nicht zeitgemäß oder ausgereift genug erscheinen. Für den Fall, dass ein nach diesem Modell bereits als stabil veröffentlichter Kernel noch ein Update einen Patch benötigt, hat der Chefentwickler die Versionsnummer um eine vierte Stelle erweitert. Der Kernel mit der Basisversion 2.6.14 hat beispielsweise zur Zeit sechs Update-Runden erfahren. Aktuell ist demnach die Version 2.6.14.6. Die Folge dieser Versionspolitik ist, dass sich auch die Interfaces der neueren 2.6er-Kernel durchaus von denen der älteren 2.6er-Kernel unterscheiden. Das allein macht es bereits notwendig, eine Überarbeitung der ersten Auflage unseres Buches vorzunehmen und an die aktuelle Entwicklung anzupassen. Für die zweite Auflage haben wir Kernel 2.6.15 als Basis genommen. Wir haben darüber hinaus die Gelegenheit genutzt, das Buch um weiter reichende, sinnvolle Aspekte der Treiberentwicklung zu vervollständigen. So hilft Ihnen das neue Kapitel über dynamische Speicherverwaltung, im Treiber effizient mit Speicher umzugehen; der Abschnitt über Per- CPU-Variablen erläutert das Prinzip der Konfliktvermeidung. Außerdem beschreiben wir die Implementierung des asynchronen Treiberzugriffs und wie Sie Code erstellen, der auch auf modernen 64-Bit-Systemen fehlerfrei abläuft. Die Liste mit Prototypen und Beschreibungen der wichtigsten Kernel-Funktionen ist in dieser Auflage um knapp 80 Funktionen auf über 450 gewachsen. Bei den Lesern möchten wir uns dafür bedanken, dass sie das Buch überaus freundlich aufgenommen haben. Ein besonderes Dankeschön gilt zudem den Lesern, die uns für die zweite Auflage mit vielen Anregungen versorgt haben. Kempen, im Januar 2006 Eva-Katharina Kunst und Jürgen Quade
vii Vorwort zur ersten Auflage Gut zwei Jahre hat die Torvalds'sche Entwicklergemeinde an der Version 2.6 des Linux-Kernels gearbeitet. Seit Dezember 2003 steht er in einer stabilen Version zur Verfügung. Wie seine Vorgänger lässt sich der neue Kernel auf ganz unterschiedlicher Hardware betreiben: auf PDAs, auf Mainframes oder gar im Toaster. Dafür gibt es auch gute Gründe: Linux ist außergewöhnlich skalierbar. Es basiert auf den durchdachten Konzepten eines Unix-Systems. Sein quelloffener Code reizt Tausende Entwickler aus aller Welt, das System technisch zu perfektionieren. Einfache Systemstrukturen ermöglichen die Portierung von Linux und die Anbindung zusätzlicher Hardware in kürzester Zeit. Die umfangreichste Komponente des Kernels stellen Gerätetreiber dar. Es überrascht daher nicht, dass sich Entwickler intensiv mit diesem Bereich der Linux-Kernel-Programmierung auseinander setzen. Auch das nun vorliegende Buch richtet sich in erster Linie an den Entwickler, und zwar unabhängig davon, ob er erstmalig in die Kernel-Programmierung einsteigen möchte oder bereits Erfahrungen mit einem vorherigen Linux- Kern gemacht hat. Auch ist irrelevant, ob er beispielsweise als Entwickler eines eingebetteten Systems ein spezifisches Projekt vor Augen hat, oder als Student einfach nur»reinschnuppern«möchte. Gute Programmierkenntnisse in der Sprache C vorausgesetzt, wird kompakt und vor allem systematisch in die Treiberentwicklung eingeführt. Die innerhalb des Kernels zur Treibererstellung nutzbaren Technologien werden vorgestellt und mit abgeschlossenen, funktionstüchtigen Code-Beispielen belebt. Erläuterungen zum Programmierstil und zu den Programmiertricks erfahrener Kernel-Hacker runden das Thema ebenso ab, wie ein auf Erfahrungswissen basierender Abschnitt über den Entwurf guter und performanter Treiber. Im Anhang befindet sich darüber hinaus eine Beschreibung der für die Treiberentwicklung wichtigsten Kernel-Funktionen. Damit eignet sich das Buch sowohl zum Studium als auch als praktisches Handbuch bei der täglichen Arbeit. Natürlich ist jeder Versuch, die Treiberentwicklung umfassend darstellen zu wollen, zum Scheitern verurteilt. Wir haben uns auf eine geeignete Auswahl konzentriert. Geeignet heißt in diesem Fall, dass die vorgestellten Techniken für einen möglichst breiten Leserkreis nützlich
viii Vorwort zur ersten Auflage sind. Um zu einer kompakten und übersichtlichen Darstellung zu gelangen, lässt das Buch Altlasten hinter sich und behandelt im Wesentlichen Kernel 2.6. Für Umsteiger von 2.4 auf 2.6 gibt es im Anhang einen Abschnitt, der die Portierung vorhandener Treiber auf den neuen Kernel beschreibt. Der Linux-Kernel entwickelt sich ständig weiter. Zum Zeitpunkt der Erstellung ist die Kernel-Version 2.6.5 aktuell. Da mit neuen Kernel-Versionen oftmals Änderungen der Schnittstellen einhergehen, sollte sich der Leser nicht wundern, wenn es an einzelnen Interfaces zwischenzeitlich zu Abweichungen gekommen ist. In Zweifelsfällen hilft ein kurzer Blick in den Quellcode. Kempen, im April 2004 Eva-Katharina Kunst und Jürgen Quade