FreeBSD: Драйверы устройств
От первых шагов к мастерству работы с ядром
автор: Edson Brandi · Версия 2.0 (апрель 2026)
Об этой книге
FreeBSD: Драйверы устройств: От первых шагов к мастерству работы с ядром — это бесплатная книга с открытым исходным кодом, которая проведёт вас от «я никогда не писал код ядра» до «я могу писать, отлаживать и отправлять в репозиторий драйверы FreeBSD производственного качества». Это скорее учебный курс, чем справочник, структурированный в 38 глав, 6 приложений и десятки практических лабораторных работ, которые компилируются и загружаются на реальной системе FreeBSD 14.x.
Книга рассчитана на читателей, готовых учиться, а не на уже квалифицированных специалистов. Она начинается с основ UNIX и языка C, шаг за шагом объясняет каждую концепцию, которая потребуется вам при работе с ядром, и только затем открывает дверь в мир разработки драйверов. К тому моменту, как вы дойдёте до DMA, прерываний и PCI, вся терминология будет уже не чужой, а заслуженно усвоенной.
«Программирование ядра — это всё ещё программирование, только с более явными правилами, большей ответственностью и чуть большей мощью. Как только вы это поймёте, страх уступит место воодушевлению.» (из главы 1)
Зачем эта книга?
Существуют отличные справочные материалы по ядру FreeBSD: man 9, Архитектурное руководство (Architecture Handbook), документы Newbus. Однако не хватало единого текста, который:
- Начинает с нуля. UNIX, C и среда FreeBSD преподаются до того, как написан хоть какой-нибудь код ядра.
- Ориентирован именно на FreeBSD 14.x. Каждый API, каждый пример, каждая лабораторная работа проверены на дереве исходных кодов FreeBSD 14.3.
- Считает лабораторные работы первостепенными. Примерно половина рекомендуемого времени обучения — практические занятия. Одни и те же шаблоны (присоединение, очистка, блокировка) повторяются из главы в главу, пока не войдут в привычку.
- Строит один драйвер на протяжении всей книги. Драйвер
myfirst развивается от главы к главе: сначала синхронизация, затем доступ к оборудованию, потом прерывания и DMA. Вы видите, как один и тот же код созревает у вас в руках.
- Охватывает полный жизненный цикл. От «Hello Kernel Module» до отправки запроса на рецензию в Phabricator и внедрения драйвера в дерево FreeBSD.
Для кого эта книга
- Новички, которые мало знают о C, UNIX или ядрах, но готовы учиться.
- Разработчики, которым интересно, как на самом деле работают операционные системы под капотом.
- Профессионалы, уже использующие FreeBSD (или подобные системы) и желающие углубить свои знания, изучая на практике создание драйверов.
Для кого эта книга не предназначена
- Читателям, которые ищут быструю шпаргалку для копирования и вставки. Книга делает упор на понимание, а не на готовые решения.
- Опытным разработчикам ядра, которым не нужны основы. Темп изложения начинается с азов.
- Читателям, которым нужна энциклопедическая справка по оборудованию. Основное внимание уделяется разработке драйверов FreeBSD в реальных условиях, а не исчерпывающим спецификациям шин или устройств.
Чему вы научитесь
Книга разделена на семь частей, которые последовательно строятся друг на друге:
| Часть | Название | Основное содержание |
|---|
| 1 | Основы: FreeBSD, C и ядро | Настройка лаборатории, UNIX, C для работы с ядром, анатомия драйвера |
| 2 | Создание первого драйвера | Символьные драйверы, файлы устройств, read/write, ввод-вывод |
| 3 | Параллелизм и синхронизация | Потоки, мьютексы, условные переменные, таймеры, очереди задач, семафоры |
| 4 | Интеграция с оборудованием и платформой | PCI, прерывания, MSI/MSI-X, DMA, управление питанием |
| 5 | Отладка, инструменты и практические приёмы | Трассировка, KGDB, продвинутая отладка, настройка производительности |
| 6 | Драйверы для конкретных транспортных интерфейсов | USB, последовательные порты, накопители/VFS, сетевые драйверы |
| 7 | Мастерство: особые сценарии и пограничные случаи | Переносимость, виртуализация, безопасность, встраиваемые системы, обратная разработка, отправка в upstream |
К концу вы напишете и загрузите собственные модули ядра, построите символьный драйвер, обработаете реальные прерывания и DMA, отладите панику ядра, профилируете свой драйвер под нагрузкой и пройдёте все шаги по внесению своей работы в проект FreeBSD.
Статистика книги
| |
|---|
| Страницы | 4 500+ |
| Главы | 38 |
| Приложения | 6 |
| Время чтения | ~100 часов |
| Время на лабораторные | ~100 часов |
| Общее время обучения | ~200 часов (≈6 месяцев по 5 часов в неделю) |
| Целевой выпуск FreeBSD | 14.3 |
| Языки | Английский (оригинал) · Бразильский португальский (перевод с помощью ИИ) · Испанский (перевод с помощью ИИ) |
| Форматы | PDF · EPUB · HTML · Исходный код на Markdown |
Полное оглавление
Нажмите, чтобы развернуть полный список глав
Часть 1: Основы FreeBSD, C и ядра
- Введение: от любопытства к вкладу
- Настройка вашей лаборатории
- Мягкое введение в UNIX
- Первый взгляд на язык программирования C
- Понимание C для программирования ядра FreeBSD
- Анатомия драйвера FreeBSD
Часть 2: Создание первого драйвера
- Написание вашего первого драйвера
- Работа с файлами устройств
- Чтение и запись на устройства
- Эффективная обработка ввода и вывода
Часть 3: Параллелизм и синхронизация
- Параллелизм в драйверах
- Механизмы синхронизации
- Таймеры и отложенные работы
- Очереди задач и отложенные работы
- Дополнительная синхронизация: условия, семафоры и координация
Часть 4: Интеграция с оборудованием и платформой
- Доступ к оборудованию
- Моделирование оборудования
- Написание драйвера PCI
- Обработка прерываний
- Продвинутая обработка прерываний
- DMA и высокоскоростная передача данных
- Управление питанием
Часть 5: Отладка, инструменты и практические приёмы
- Отладка и трассировка
- Интеграция с ядром
- Продвинутые темы и практические советы
Часть 6: Драйверы для конкретных транспортных интерфейсов
- Драйверы USB и последовательных портов
- Работа с накопителями и уровнем VFS
- Написание сетевого драйвера
Часть 7: Мастерство
- Переносимость и абстракция драйвера
- Виртуализация и контейнеризация
- Лучшие практики безопасности
- Device Tree и разработка для встраиваемых систем
- Настройка производительности и профилирование
- Продвинутые методы отладки
- Асинхронный ввод/вывод и обработка событий
- Создание драйверов без документации (обратная разработка)
- Отправка вашего драйвера в проект FreeBSD
- Заключительные мысли и следующие шаги
Приложения
- A: Справочник по API ядра FreeBSD
- B: Алгоритмы и логика для системного программирования
- C: Аппаратные концепции для разработчиков драйверов
- D: Концепции операционных систем
- E: Навигация по внутреннему устройству ядра FreeBSD
- F: Тестовый стенд и результаты
Как читать книгу