
Livre sur les pilotes de périphériques FreeBSD
Des premiers pas à la maîtrise du noyau
par Edson Brandi · Version 2.0 (Avril 2026)
FreeBSD Device Drivers : Des premiers pas à la maîtrise du noyau est un livre gratuit et open source qui vous emmène de « Je n’ai jamais écrit de code dans le noyau » à « Je sais écrire, déboguer et soumettre des pilotes FreeBSD de qualité professionnelle ». Il s’agit davantage d’un cours guidé que d’une référence, structuré autour de 38 chapitres, 6 annexes et des dizaines de laboratoires pratiques qui se compilent et se chargent sur un vrai système FreeBSD 14.x.
Le livre s’adresse à des lecteurs qui sont prêts à apprendre plutôt que déjà qualifiés. Il commence par les fondamentaux d’UNIX et du langage C, avance pas à pas à travers chaque concept que le noyau exigera de vous, et seulement ensuite ouvre la porte au développement de pilotes. Quand vous arriverez à la DMA, aux interruptions et au travail avec PCI, le vocabulaire vous semblera acquis, non imposé.
« La programmation du noyau reste de la programmation, seulement avec des règles plus explicites, plus de responsabilités et un peu plus de pouvoir. Une fois que vous comprenez cela, la peur laisse place à l’enthousiasme. » (extrait du chapitre 1)
Il existe déjà d’excellentes références sur le noyau FreeBSD, notamment man 9, le Architecture Handbook et les articles sur Newbus. Ce qui manquait, c’est un texte unique qui :
myfirst évolue chapitre après chapitre, gagnant la synchronisation, puis l’accès au matériel, puis les interruptions, puis la DMA. Vous voyez le même code mûrir entre vos mains.Le livre est organisé en sept parties qui s’appuient les unes sur les autres :
À la fin, vous aurez écrit et chargé vos propres modules noyau, construit un pilote de type caractère, géré de vraies interruptions et de la DMA, débogué des paniques noyau, profilé votre pilote sous charge et parcouru chaque étape de contribution de votre travail au projet FreeBSD.
Le rythme recommandé est d’un chapitre par semaine, pour environ cinq heures d’étude hebdomadaire. Ce programme place le livre entier à portée sur une année académique. Certains chapitres (notamment le chapitre 4 sur le C et les chapitres matériels de la partie 4) s’étendent naturellement sur plusieurs semaines.
Les laboratoires sont fortement recommandés. La programmation du noyau récompense la mémoire musculaire d’une manière que peu de disciplines font. Le même motif d’attachement, la même chaîne de nettoyage et la même forme de verrouillage apparaissent chapitre après chapitre et pilote après pilote. Taper ces motifs, les compiler, les charger dans un noyau en cours d’exécution et les voir échouer intentionnellement est le moyen le plus efficace de les internaliser.
Si vous connaissez déjà le C, UNIX et la forme générale d’un noyau de système d’exploitation, des notes de passage rapide tout au long de la partie 1 vous indiquent quelles sections lire attentivement et lesquelles vous pouvez survoler.
La version 2.0 est disponible dès maintenant sur la page des versions en trois langues et trois formats :
Vous pouvez également parcourir la source Markdown directement dans le répertoire content/, ou construire le livre vous-même avec scripts/build-book.sh.
La version anglaise est la version originale et faisant autorité du livre. Les éditions en portugais brésilien et en espagnol ont été traduites par IA et n’ont pas encore bénéficié d’une révision technique humaine complète. Elles sont publiées pour rendre le matériel accessible à davantage de lecteurs, mais peuvent contenir des erreurs de traduction, des formulations maladroites ou des inexactitudes techniques introduites lors de la traduction.
Si quelque chose dans une édition traduite semble peu clair, incohérent ou techniquement douteux, veuillez vous référer à la version anglaise comme source de vérité. L’aide pour la révision et l’amélioration des traductions est la bienvenue (voir Contribuer ci-dessous).
Il s’agit d’une version préliminaire d’un très gros livre. Quelques points à connaître :
content/ pour une version propre.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
## Contribuer
Toutes les contributions sont les bienvenues, qu'il s'agisse de corrections, de clarifications, de nouveaux exemples, de traductions ou de relectures de la part de développeurs FreeBSD et d'apprenants.
### Moyens de contribuer
- **Contenu :** ajouter de nouveaux chapitres, affiner le matériel existant
- **Relecture technique :** vérifier l'exactitude des chapitres par rapport à FreeBSD 14.x
- **Relecture de traduction :** aider à relire et améliorer les éditions traduites par IA **pt_BR** et **es_ES** ; les locuteurs natifs expérimentés en FreeBSD/noyau sont particulièrement bienvenus
- **Nouvelles traductions :** aider à traduire le livre dans une autre langue
- **Code :** améliorer les exemples, les scripts de construction et les outils
- **Signalements :** signaler des bogues, des erreurs factuelles, des passages peu clairs ou des problèmes de formatage
### Signaler un problème
Lors de la soumission d'un problème, veuillez inclure :
- La version linguistique que vous lisiez (`en_US`, `pt_BR`, `es_ES`)
- Le format utilisé (PDF, EPUB, HTML ou Markdown)
- Le chapitre ou la section où le problème apparaît
- Une brève explication du problème, ainsi qu'une correction suggérée si vous en avez une
### Flux de travail
1. Forkez le dépôt
2. Créez une branche : `git checkout -b feature/votre-modification`
3. Effectuez vos modifications et testez la construction avec `scripts/build-book.sh`
4. Commitez avec un message clair : `git commit -m "Chapitre 18 : clarifier le mapping BAR"`
5. Poussez et ouvrez une Pull Request
Quand vous êtes bloqué en lisant le livre, **signaler un problème aide**. Si un passage semble erroné ou qu'un laboratoire échoue de manière inattendue, chaque rapport rend le parcours du prochain lecteur plus fluide.
## Questions fréquentes
### Pourquoi ce livre existe-t-il ?
La réponse honnête est que le projet FreeBSD a besoin de nouveaux contributeurs, et le chemin vers le travail sur le noyau et les pilotes a toujours été plus escarpé qu'il ne le devrait. La plupart des documents existants partent du principe que vous connaissez déjà UNIX, que vous maîtrisez bien le C, que vous savez ce qu'est un bus et que vous savez lire une arborescence source du noyau. Cela fonctionne pour ceux qui sont déjà presque au point. Mais cela n'aide guère le développeur curieux qui souhaite débuter.
L'objectif de ce livre est d'abaisser cette rampe d'accès. Si ne serait-ce qu'un petit nombre de lecteurs le termine et parvient à soumettre des correctifs, à relire du code, à écrire de nouveaux pilotes, ou à devenir éventuellement committer FreeBSD, le livre aura rempli sa mission. **Former la prochaine génération de contributeurs FreeBSD est la raison pour laquelle ce travail a été écrit**.
### Dois-je connaître le C avant de commencer ?
Non. Les chapitres 4 et 5 enseignent le C depuis les bases, en se concentrant sur les parties du langage qui comptent pour le travail sur le noyau (pointeurs, structures, disposition mémoire, préprocesseur et conventions d'appel). Si vous maîtrisez déjà bien le C, des encadrés dans ces chapitres vous indiquent ce qu'il faut survoler et ce qu'il faut lire attentivement.
### Dois-je connaître UNIX ou FreeBSD ?
Non. Le chapitre 2 vous guide à travers l'installation de FreeBSD dans une VM ou sur du matériel physique, et le chapitre 3 présente la ligne de commande UNIX, le système de fichiers, les processus, les permissions et les éditeurs. À la fin de la Partie 1, vous disposerez d'un laboratoire fonctionnel et du vocabulaire pour l'utiliser.
### Ai-je besoin de matériel réel ?
Pour la majeure partie du livre, non. Une machine virtuelle exécutant FreeBSD 14.x suffit pour les fondamentaux, les premiers chapitres sur les pilotes, la concurrence et la synchronisation, ainsi qu'une grande partie du matériel sur le débogage. Le matériel réel devient utile (mais toujours pas strictement nécessaire) lorsque vous abordez les chapitres sur le PCI, les interruptions et la DMA dans la Partie 4. Ces chapitres sont rédigés de manière à ce que les concepts aient du sens même si vous ne les exécutez que dans une VM.
### Cela m'aidera-t-il à écrire des pilotes Linux ?
Indirectement, oui. La discipline de programmation du noyau se transfère très bien : stratégie de verrouillage, gestion mémoire, contexte d'interruption, mappage DMA, différence entre les chemins de code bloquants et non bloquants, ordre défensif de nettoyage. Les API spécifiques diffèrent. Après avoir lu ce livre, vous ne connaîtrez pas le modèle de périphérique Linux, mais vous reconnaîtrez ses problèmes et la forme de ses solutions, et vous pourrez lire *Linux Device Drivers* (LDD) beaucoup plus facilement.
### Pourquoi FreeBSD 14.x spécifiquement ?
Chaque API, chaque exemple et chaque laboratoire a été conçu pour être exécuté sous l'arborescence source de FreeBSD 14.3 et les pages `man 9` correspondantes. En ciblant une version spécifique, le livre peut être précis sur les signatures de fonctions, les emplacements des en-têtes et le comportement. Les concepts survivront longtemps à la version 14.x ; les numéros de lignes exacts et les petits détails des API ne le feront pas, et le livre est honnête à ce sujet.
### S'agit-il d'une publication officielle du projet FreeBSD ?
Non. Il s'agit d'un livre éducatif indépendant sur le développement de pilotes de périphériques FreeBSD. Ce n'est pas une publication officielle du projet FreeBSD. L'auteur est un committer FreeBSD et un membre de l'équipe d'ingénierie de documentation (DocEng), mais le livre reflète son travail et ses opinions, et non une position officielle du projet.
### Combien de temps cela me prendra-t-il réellement ?
Si vous lisez attentivement et faites les laboratoires, prévoyez environ 200 heures de travail total. Cela représente à peu près 100 heures de lecture et 100 heures de travaux pratiques. À cinq heures par semaine, c'est un projet de soirée d'environ six mois ; à dix heures par semaine, un sprint concentré de deux mois. Lire sans faire les laboratoires réduit le temps de moitié environ mais réduit aussi la valeur : la programmation du noyau récompense la mémoire musculaire d'une manière que peu de disciplines font.
### Puis-je sauter les laboratoires ?
Vous le pouvez, mais vous ne devriez probablement pas. Les laboratoires sont l'endroit où la prose devient réflexe. Des motifs comme l'ordre d'attachement, le déroulement du nettoyage et l'acquisition de verrous reviennent dans chaque chapitre, et la seule façon fiable de les intérioriser est de les taper, de les compiler, de les charger dans un noyau en cours d'exécution et de les voir échouer intentionnellement. Les lecteurs qui sautent les laboratoires rapportent une progression qui semble fluide au début, puis qui stagne silencieusement autour de la Partie 3 ou 4.
### Comment contribuer à FreeBSD après avoir lu ce livre ?
Le chapitre 37 couvre le flux de travail complet de soumission : comment préparer un correctif, comment utiliser Phabricator (le système de relecture de code FreeBSD), comment trouver un committer pour parrainer votre travail, comment répondre aux retours de relecture, et comment guider un pilote dans l'arborescence. Les chapitres précédents construisent les compétences techniques ; le chapitre 37 construit le flux de travail social. Les deux sont importants.
### Le livre est énorme. Par où commencer ?
Commencez par le chapitre 1 sauf si vous avez une raison de ne pas le faire. Le livre est cumulatif ; les chapitres ultérieurs s'appuient sur le vocabulaire et les habitudes établis plus tôt. Si vous connaissez déjà le C, UNIX et la forme générale d'un noyau de système d'exploitation, les notes de voie rapide dans la Partie 1 vous disent ce qu'il faut survoler. Si un sous-système spécifique vous a amené ici (USB, réseau, stockage, PCI), il est acceptable de lire attentivement les Parties 1 et 2 puis de sauter en avant, mais attendez-vous à revenir en arrière lorsque des termes des chapitres précédents réapparaissent.
### J'ai trouvé une erreur. Que dois-je faire ?
Ouvrez un problème sur GitHub. Incluez la version linguistique, le format que vous lisiez, le chapitre ou la section, une brève description du problème et une correction suggérée si vous en avez une. Chaque rapport améliore l'expérience du prochain lecteur. Les problèmes de traduction dans les éditions pt_BR et es_ES sont particulièrement bienvenus, car elles n'ont pas encore fait l'objet d'une relecture technique humaine complète.
### Le livre est-il vraiment gratuit ?
Oui. Il est publié sous la licence MIT. Vous pouvez le lire, le partager, l'imprimer, le citer, l'enrichir et le traduire. L'attribution est appréciée mais pas requise pour un usage personnel. Si vous souhaitez soutenir le travail, les choses les plus utiles que vous puissiez faire sont : parler du livre à d'autres personnes, signaler des problèmes lorsque vous en trouvez, contribuer à des relectures ou des traductions, et (si cela vous mène finalement là) soumettre votre propre travail au projet FreeBSD.
## À propos de l'auteur
Je suis Edson Brandi. Mon parcours dans la technologie n'avait rien de conventionnel. J'ai commencé comme étudiant en chimie à l'Unicamp au Brésil en 1995, sans projet de travailler avec des ordinateurs, mais avec une question persistante : *comment ça fonctionne réellement ?* Cette question m'a conduit à FreeBSD, et FreeBSD a façonné ma carrière depuis.
Dans les années qui ont suivi, j'ai fondé le **groupe d'utilisateurs brésilien FreeBSD (FUG-BR)**, co-créé le **FreeBSD LiveCD Tool Set**, et en 2002 co-fondé **FreeBSD Brasil**, une entreprise proposant des formations, du conseil et du support FreeBSD, qui fonctionne encore aujourd'hui. Je suis committer FreeBSD et actuellement membre de l'**équipe d'ingénierie de documentation FreeBSD (DocEng)**, contribuant à maintenir les systèmes qui gardent la documentation de FreeBSD vivante et accessible dans le monde entier.
Professionnellement, j'ai passé ma carrière dans le leadership en infrastructure et en ingénierie dans plusieurs secteurs, et aujourd'hui je suis directeur informatique dans une entreprise de fintech à Londres.
J'ai écrit ce livre parce que je veux que d'autres personnes curieuses aient la rampe d'accès que je n'ai jamais eue. Vous n'avez pas besoin d'un diplôme en informatique pour écrire du code noyau. Ce dont vous avez besoin, c'est de curiosité, de persévérance, de patience et d'un guide qui vous prenne là où vous êtes.
Edson Brandi · [email protected]
## Licence
Ce livre et son code source d'accompagnement sont publiés sous la **licence MIT**. Voir [LICENSE](https://github.com/ebrandi/fdd-book/blob/main/LICENSE) pour le texte intégral. Vous êtes libre de lire, partager et enrichir ce travail ; l'attribution est appréciée.
## Remerciements
- La communauté de développement FreeBSD
- Tous les contributeurs, relecteurs et traducteurs
- Tous ceux qui ont déjà signalé un problème ou posé une question qui a amélioré un chapitre
## Liens
- **Dépôt :** https://github.com/ebrandi/FDD-book
- **Problèmes :** https://github.com/ebrandi/FDD-book/issues
- **Discussions :** https://github.com/ebrandi/FDD-book/discussions
- **Auteur :** Edson Brandi · [email protected]
---
<p align="center"><em>Si ce livre vous aide, merci de mettre une étoile au dépôt et de le partager avec quelqu'un d'autre curieux de savoir comment les ordinateurs fonctionnent vraiment.</em></p>
| Partie | Titre | Objectif |
|---|
| 1 | Fondations : FreeBSD, C et le noyau | Configuration du laboratoire, UNIX, C pour le noyau, anatomie d’un pilote |
| 2 | Construire votre premier pilote | Pilotes caractère, fichiers de périphérique, lecture/écriture, E/S |
| 3 | Concurrence et synchronisation | Threads, mutex, condvars, temporisateurs, taskqueues, sémaphores |
| 4 | Intégration matérielle et au niveau de la plateforme | PCI, interruptions, MSI/MSI-X, DMA, gestion d’énergie |
| 5 | Débogage, outils et pratiques du monde réel | Trace, KGDB, débogage avancé, réglage des performances |
| 6 | Écrire des pilotes spécifiques à un transport | USB, série, stockage/VFS, pilotes réseau |
| 7 | Sujets de maîtrise : scénarios particuliers et cas limites | Portabilité, virtualisation, sécurité, embarqué, rétro-ingénierie, soumission en amont |
| Pages | 4 500+ |
| Chapitres | 38 |
| Annexes | 6 |
| Temps de lecture | ~100 heures |
| Temps de laboratoire | ~100 heures |
| Temps d’étude total | ~200 heures (≈6 mois à 5 h/semaine) |
| Version cible de FreeBSD | 14.3 |
| Langues | Anglais (original) · Portugais brésilien (traduit par IA) · Espagnol (traduit par IA) |
| Formats | PDF · EPUB · HTML · Source Markdown |
| Langue | EPUB | HTML |
|---|
| Anglais (original) | EPUB | HTML | |
| Português (Brasil), traduit par IA | EPUB | HTML | |
| Español, traduit par IA | EPUB | HTML |