
FreeBSD Gerätetreiber Buch
Von den ersten Schritten zur Kernel-Meisterschaft
von Edson Brandi · Version 2.0 (April 2026)
FreeBSD Device Drivers: From First Steps to Kernel Mastery ist ein kostenloses Open-Source-Buch, das Sie von „Ich habe noch nie Kernel-Code geschrieben“ zu „Ich kann produktionsreife FreeBSD-Treiber schreiben, debuggen und einreichen“ führt. Es ist eher ein geführter Kurs als ein Nachschlagewerk, strukturiert in 38 Kapitel, 6 Anhänge und Dutzende von praktischen Übungen, die auf einem echten FreeBSD 14.x-System kompilieren und geladen werden.
Das Buch richtet sich an Leser, die bereit sind zu lernen, statt bereits qualifiziert zu sein. Es beginnt mit UNIX-Grundlagen und der Sprache C, führt Schritt für Schritt durch jedes Konzept, das der Kernel von Ihnen verlangen wird, und öffnet erst dann die Tür zur Treiberentwicklung. Wenn Sie zu DMA, Interrupts und PCI-Arbeit gelangen, fühlt sich der Vokabelschatz verdient an, nicht aufgedrängt.
„Kernel-Programmierung ist immer noch Programmierung, nur mit expliziteren Regeln, größerer Verantwortung und ein wenig mehr Macht. Wenn man das erst einmal verstanden hat, weicht die Angst der Begeisterung.“ (aus Kapitel 1)
Es gibt bereits hervorragende FreeBSD-Kernel-Referenzen, darunter man 9, das Architecture Handbook und die Newbus-Papiere. Was gefehlt hat, ist ein einziger Text, der:
myfirst-Treiber entwickelt sich Kapitel für Kapitel weiter, erhält Synchronisation, dann Hardware-Zugriff, dann Interrupts, dann DMA. Sie sehen denselben Code in Ihren eigenen Händen reifen.Das Buch ist in sieben Teile gegliedert, die aufeinander aufbauen:
Am Ende haben Sie Ihre eigenen Kernel-Module geschrieben und geladen, einen Zeichentreiber erstellt, echte Interrupts und DMA behandelt, Kernel-Panics debuggt, Ihren Treiber unter Last profiliert und jeden Schritt der Rückführung Ihrer Arbeit in das FreeBSD-Projekt durchlaufen.
Das empfohlene Tempo ist ein Kapitel pro Woche bei etwa fünf Stunden wöchentlicher Studienzeit. Dieser Zeitplan macht das gesamte Buch innerhalb eines akademischen Jahres erreichbar. Einige Kapitel (insbesondere Kapitel 4 über C und die Hardware-Kapitel in Teil 4) erstrecken sich natürlicherweise über mehrere Wochen.
Die Übungen werden dringend empfohlen. Kernel-Programmierung belohnt Muskelgedächtnis auf eine Weise, die nur wenige Disziplinen tun. Das gleiche Attach-Muster, die gleiche Cleanup-Kette und die gleiche Locking-Form treten Kapitel für Kapitel und Treiber für Treiber auf. Diese Muster einzutippen, zu kompilieren, in einen laufenden Kernel zu laden und sie absichtlich scheitern zu sehen, ist die mit Abstand effektivste Methode, sie zu verinnerlichen.
Wenn Sie bereits C, UNIX und die allgemeine Form eines OS-Kernels kennen, zeigen Ihnen Fast-Path-Hinweise in Teil 1, welche Abschnitte Sie sorgfältig lesen und welche Sie überfliegen können.
Version 2.0 ist jetzt auf der Releases-Seite in drei Sprachen und drei Formaten verfügbar:
Sie können auch den Markdown-Quellcode direkt im Verzeichnis content/ durchsuchen oder das Buch selbst mit scripts/build-book.sh erstellen.
Die englische Version ist die Original- und maßgebliche Version des Buches. Die brasilianisch-portugiesische und die spanische Ausgabe wurden mit KI übersetzt und haben noch keine vollständige menschliche Fachprüfung durchlaufen. Sie werden veröffentlicht, um das Material einem größeren Leserkreis zugänglich zu machen, können jedoch Übersetzungsfehler, ungeschickte Formulierungen oder technische Ungenauigkeiten enthalten, die bei der Übersetzung entstanden sind.
Wenn etwas in einer übersetzten Ausgabe unklar, inkonsistent oder technisch fragwürdig erscheint, ziehen Sie bitte die englische Version als Quelle der Wahrheit heran. Hilfe bei der Überprüfung und Verbesserung der Übersetzungen ist sehr willkommen (siehe Mitwirken unten).
Dies ist ein Entwurfs-Release eines sehr großen Buches. Einige Dinge, die zu beachten sind:
content/ für eine saubere Version.FDD-book/ ├── content/ # Book content (Markdown) │ ├── chapters/ # Chapters by Part │ └── appendices/ # Appendices A-F ├── examples/ # Source code from the book ├── translations/ │ ├── pt_BR/ # Brazilian Portuguese (AI-translated) │ └── es_ES/ # Spanish (AI-translated) └── scripts/ # Build and utility scripts
## Mitwirken
Beiträge aller Art sind willkommen, einschließlich Korrekturen, Klarstellungen, neuer Beispiele, Übersetzungen und Reviews von FreeBSD-Entwicklern und -Lernenden gleichermaßen.
### Möglichkeiten zur Mitarbeit
- **Inhalt:** neue Kapitel hinzufügen, vorhandenes Material verfeinern
- **Technische Überprüfung:** Kapitel auf Richtigkeit für FreeBSD 14.x überprüfen
- **Übersetzungsüberprüfung:** Hilfe bei der Überprüfung und Verbesserung der KI-übersetzten **pt_BR**- und **es_ES**-Ausgaben; Muttersprachler mit FreeBSD-/Kernel-Erfahrung sind besonders willkommen
- **Neue Übersetzungen:** Hilfe bei der Übersetzung des Buches in eine andere Sprache
- **Code:** Beispiele, Build-Skripte und Werkzeuge verbessern
- **Issues:** Fehler, sachliche Fehler, unklare Passagen oder Formatierungsprobleme melden
### Ein Problem melden
Wenn Sie ein Issue einreichen, geben Sie bitte Folgendes an:
- Die Sprachversion, die Sie gelesen haben (`en_US`, `pt_BR`, `es_ES`)
- Das verwendete Format (PDF, EPUB, HTML oder Markdown)
- Das Kapitel oder der Abschnitt, in dem das Problem auftritt
- Eine kurze Erklärung des Problems und ggf. einen Korrekturvorschlag
### Arbeitsablauf
1. Repository forken
2. Einen Branch erstellen: `git checkout -b feature/your-change`
3. Änderungen vornehmen und den Build mit `scripts/build-book.sh` testen
4. Mit einer klaren Nachricht committen: `git commit -m "Chapter 18: clarify BAR mapping"`
5. Pushen und einen Pull Request öffnen
Wenn Sie beim Lesen des Buches nicht weiterkommen, **hilft das Einreichen eines Issues**. Wenn eine Passage falsch erscheint oder ein Labor unerwartet fehlschlägt, macht jeder Bericht den Weg für den nächsten Leser einfacher.
## Häufig gestellte Fragen
### Warum existiert dieses Buch?
Die ehrliche Antwort ist, dass das FreeBSD-Projekt neue Mitwirkende braucht und der Einstieg in die Kernel- und Treiberarbeit schon immer steiler war, als er sein sollte. Die meisten vorhandenen Materialien setzen voraus, dass Sie bereits UNIX, C gut, wissen, was ein Bus ist, und wissen, wie man einen Kernel-Quellbaum liest. Das funktioniert für diejenigen, die schon fast da sind. Für den neugierigen Entwickler, der anfangen möchte, tut es sehr wenig.
Das Ziel dieses Buches ist es, diese Einstiegshürde zu senken. Wenn auch nur eine kleine Anzahl von Lesern es beendet und dann Patches einreicht, Code überprüft, neue Treiber schreibt oder schließlich FreeBSD-Committer wird, hat das Buch seine Aufgabe erfüllt. **Die Ausbildung der nächsten Generation von FreeBSD-Mitwirkenden ist der Grund, warum dieses Werk geschrieben wurde.**
### Muss ich vorher C können?
Nein. Die Kapitel 4 und 5 lehren C von Grund auf und konzentrieren sich auf die Teile der Sprache, die für die Kernel-Arbeit wichtig sind (Zeiger, Strukturen, Speicherlayout, Präprozessor und Aufrufkonventionen). Wenn Sie C bereits gut beherrschen, zeigen Ihnen Randnotizen in diesen Kapiteln, was Sie überfliegen und was Sie genau lesen sollten.
### Muss ich UNIX oder FreeBSD kennen?
Nein. Kapitel 2 führt Sie durch die Installation von FreeBSD in einer VM oder auf einem physischen Rechner, und Kapitel 3 stellt die UNIX-Kommandozeile, das Dateisystem, Prozesse, Berechtigungen und Editoren vor. Am Ende von Teil 1 werden Sie ein funktionierendes Labor und das Vokabular haben, um es zu nutzen.
### Brauche ich echte Hardware?
Für den größten Teil des Buches: nein. Eine virtuelle Maschine mit FreeBSD 14.x reicht aus für die Grundlagen, die ersten Treiberkapitel, Parallelität und Synchronisation sowie einen großen Teil des Debugging-Materials. Echte Hardware wird nützlich (ist aber immer noch nicht zwingend erforderlich), wenn Sie die PCI-, Interrupt- und DMA-Kapitel in Teil 4 erreichen. Diese Kapitel sind so geschrieben, dass die Konzepte auch dann Sinn ergeben, wenn Sie sie nur in einer VM ausführen.
### Hilft mir dieses Buch, Linux-Treiber zu schreiben?
Indirekt ja. Die Disziplin der Kernelprogrammierung lässt sich sehr gut übertragen: Locking-Strategie, Speicherverwaltung, Interrupt-Kontext, DMA-Mapping, Unterschied zwischen schlafenden und nicht schlafenden Codepfaden, defensive Bereinigungsreihenfolge. Die spezifischen APIs unterscheiden sich. Nach der Lektüre dieses Buches werden Sie das Linux-Gerätemodell nicht kennen, aber Sie werden seine Probleme und die Form seiner Lösungen erkennen und Sie werden Linux Device Drivers (LDD) viel leichter lesen können.
### Warum speziell FreeBSD 14.x?
Jede API, jedes Beispiel und jedes Labor wurde für die Ausführung unter dem FreeBSD 14.3-Quellbaum und den entsprechenden `man 9`-Seiten konzipiert. Die Ausrichtung auf eine bestimmte Version ermöglicht es dem Buch, bei Funktionssignaturen, Header-Pfaden und Verhalten präzise zu sein. Die Konzepte werden 14.x um viele Jahre überdauern; die genauen Zeilennummern und kleinen API-Details werden das nicht, und das Buch ist ehrlich darin.
### Ist dies eine offizielle Veröffentlichung des FreeBSD-Projekts?
Nein. Dies ist ein unabhängiges Bildungsbuch über die Entwicklung von FreeBSD-Gerätetreibern. Es ist keine offizielle Veröffentlichung des FreeBSD-Projekts. Der Autor ist ein FreeBSD-Committer und Mitglied des Documentation Engineering Teams (DocEng), aber das Buch spiegelt seine Arbeit und Ansichten wider, nicht eine offizielle Position des Projekts.
### Wie lange wird mich das tatsächlich kosten?
Wenn Sie sorgfältig lesen und die Labore machen, rechnen Sie mit etwa 200 Stunden Gesamtarbeit. Das sind in etwa 100 Stunden Lesen und 100 Stunden praktischer Laborarbeit. Bei fünf Stunden pro Woche ist das ein etwa sechsmonatiges Abendprojekt; bei zehn Stunden pro Woche ein fokussierter zweimonatiger Sprint. Lesen ohne die Labore halbiert die Zeit ungefähr, halbiert aber auch den Wert: Kernelprogrammierung belohnt Muskelgedächtnis auf eine Weise, wie es nur wenige Disziplinen tun.
### Kann ich die Labore überspringen?
Sie können, aber wahrscheinlich sollten Sie nicht. Die Labore sind der Ort, an dem Prosa zum Reflex wird. Muster wie Attach-Reihenfolge, Bereinigungs-Rückwicklung und Lock-Erwerb tauchen in jedem Kapitel wieder auf, und der einzige zuverlässige Weg, sie zu verinnerlichen, ist, sie zu tippen, zu kompilieren, in einen laufenden Kernel zu laden und sie absichtlich scheitern zu sehen. Leser, die die Labore überspringen, berichten von Fortschritten, die sich anfangs glatt anfühlen und dann um Teil 3 oder Teil 4 herum leise ins Stocken geraten.
### Wie kann ich nach der Lektüre zu FreeBSD beitragen?
Kapitel 37 behandelt den vollständigen Einreichungsworkflow: wie man einen Patch vorbereitet, wie man Phabricator (das FreeBSD-Code-Review-System) verwendet, wie man einen Committer findet, der die Arbeit sponsert, wie man auf Review-Feedback reagiert und wie man einen Treiber in den Baum bringt. Die früheren Kapitel bauen die technischen Fähigkeiten auf; Kapitel 37 baut den sozialen Workflow auf. Beides ist wichtig.
### Das Buch ist riesig. Wo soll ich anfangen?
Beginnen Sie mit Kapitel 1, es sei denn, Sie haben einen Grund, es nicht zu tun. Das Buch ist kumulativ; spätere Kapitel stützen sich auf Vokabular und Gewohnheiten, die früher etabliert wurden. Wenn Sie bereits C, UNIX und die allgemeine Form eines OS-Kernels kennen, sagen Ihnen die Schnellpfad-Notizen in Teil 1, was Sie überfliegen können. Wenn ein bestimmtes Subsystem Sie hierher geführt hat (USB, Netzwerk, Speicher, PCI), ist es in Ordnung, die Teile 1 und 2 sorgfältig zu lesen und dann vorzuspringen, aber erwarten Sie, zurückzukehren, wenn Begriffe aus früheren Kapiteln wieder auftauchen.
### Ich habe einen Fehler gefunden. Was soll ich tun?
Öffnen Sie ein Issue auf GitHub. Geben Sie die Sprachversion, das Format, das Sie gelesen haben, das Kapitel oder den Abschnitt, eine kurze Beschreibung des Problems und einen Korrekturvorschlag an, falls Sie einen haben. Jeder Bericht macht die Erfahrung des nächsten Lesers besser. Übersetzungsprobleme in den pt_BR- und es_ES-Ausgaben sind besonders willkommen, da diese noch keine vollständige menschliche technische Überprüfung durchlaufen haben.
### Ist das Buch wirklich kostenlos?
Ja. Es ist unter der MIT-Lizenz veröffentlicht. Sie können es lesen, teilen, drucken, zitieren, darauf aufbauen und übersetzen. Eine Namensnennung wird geschätzt, ist aber für den persönlichen Gebrauch nicht erforderlich. Wenn Sie die Arbeit unterstützen möchten, sind die nützlichsten Dinge, die Sie tun können: anderen von dem Buch erzählen, Issues einreichen, wenn Sie Probleme finden, Reviews oder Übersetzungen beitragen und (wenn es Sie schließlich dorthin führt) Ihre eigene Arbeit beim FreeBSD-Projekt einreichen.
## Über den Autor
Ich bin Edson Brandi. Mein Weg in die Technologie war alles andere als konventionell. Ich begann 1995 als Chemiestudent an der Unicamp in Brasilien, ohne Plan, mit Computern zu arbeiten, aber mit einer beharrlichen Frage: *Wie funktioniert das eigentlich?* Diese Frage führte mich zu FreeBSD, und FreeBSD hat meine Karriere seitdem geprägt.
In den folgenden Jahren gründete ich die **Brazilian FreeBSD User Group (FUG-BR)**, war Mitbegründer des **FreeBSD LiveCD Tool Set** und gründete 2002 gemeinsam mit anderen **FreeBSD Brasil**, ein Unternehmen, das FreeBSD-Schulungen, -Beratung und -Support anbietet und noch heute tätig ist. Ich bin FreeBSD-Committer und derzeit Mitglied des **FreeBSD Documentation Engineering Teams (DocEng)**, das die Systeme wartet, die FreeBSDs Dokumentation weltweit am Leben und zugänglich halten.
Beruflich habe ich meine Karriere in der Infrastruktur- und Engineering-Leitung in mehreren Branchen verbracht und bin heute IT-Direktor bei einem Fintech-Unternehmen in London.
Ich habe dieses Buch geschrieben, weil ich möchte, dass andere neugierige Menschen den Einstieg haben, den ich nie hatte. Sie brauchen keinen Informatikabschluss, um Kernel-Code zu schreiben. Was Sie brauchen, ist Neugier, Ausdauer, Geduld und einen Leitfaden, der Sie dort abholt, wo Sie stehen.
Edson Brandi · [email protected]
## Lizenz
Dieses Buch und der dazugehörige Quellcode sind unter der **MIT-Lizenz** veröffentlicht. Siehe [LICENSE](https://github.com/ebrandi/fdd-book/blob/HEAD/LICENSE) für den vollständigen Text. Sie können dieses Werk frei lesen, teilen und darauf aufbauen; eine Namensnennung wird geschätzt.
## Danksagungen
- Die FreeBSD-Entwicklungsgemeinschaft
- Alle Mitwirkenden, Prüfer und Übersetzer
- Jeder, der jemals ein Issue eingereicht oder eine Frage gestellt hat, die ein Kapitel verbessert hat
## Links
- **Repository:** https://github.com/ebrandi/FDD-book
- **Issues:** https://github.com/ebrandi/FDD-book/issues
- **Diskussionen:** https://github.com/ebrandi/FDD-book/discussions
- **Autor:** Edson Brandi · [email protected]
---
<p align="center"><em>Wenn dieses Buch Ihnen hilft, geben Sie bitte einen Stern auf das Repository und teilen Sie es mit jemandem, der auch neugierig ist, wie Computer wirklich funktionieren.</em></p>
| Teil | Titel | Schwerpunkt |
|---|
| 1 | Grundlagen: FreeBSD, C und der Kernel | Laboraufbau, UNIX, C für Kernel-Arbeit, Treiberanatomie |
| 2 | Ihren ersten Treiber erstellen | Zeichentreiber, Gerätedateien, Lesen/Schreiben, E/A |
| 3 | Nebenläufigkeit und Synchronisation | Threads, Mutexe, Condvars, Timer, Taskqueues, Semaphore |
| 4 | Hardware- und Plattformintegration | PCI, Interrupts, MSI/MSI-X, DMA, Energiemanagement |
| 5 | Debugging, Werkzeuge und Praxis | Tracing, KGDB, fortgeschrittenes Debugging, Leistungsoptimierung |
| 6 | Transportspezifische Treiber schreiben | USB, serielle, Storage/VFS-, Netzwerktreiber |
| 7 | Meisterschaftsthemen: Spezielle Szenarien und Grenzfälle | Portabilität, Virtualisierung, Sicherheit, Embedded, Reverse Engineering, Upstream-Einreichung |
| Seiten | 4.500+ |
| Kapitel | 38 |
| Anhänge | 6 |
| Lesezeit | ~100 Stunden |
| Übungszeit | ~100 Stunden |
| Gesamte Studienzeit | ~200 Stunden (≈6 Monate bei 5 Std./Woche) |
| Ziel-FreeBSD-Release | 14.3 |
| Sprachen | Englisch (Original) · Brasilianisches Portugiesisch (KI-übersetzt) · Spanisch (KI-übersetzt) |
| Formate | PDF · EPUB · HTML · Markdown-Quellcode |
| Sprache | EPUB | HTML |
|---|
| Englisch (Original) | EPUB | HTML | |
| Português (Brasil), KI-übersetzt | EPUB | HTML | |
| Español, KI-übersetzt | EPUB | HTML |