Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
FDD-book — Книга по драйверам устройств FreeBSD | Kitploit
Инструменты/GitHubGitHub/ebrandi/fdd-book
Безопасность встроенных системОбратная инженерияОтладчикиАппаратный ХакингАппаратная БезопасностьОбучение и ОбразованиеУчебные Маршруты и КурсыАнализ ПрошивокЛаборатории и Практика
GitHubebrandi/fdd-book

FDD-book

Книга по драйверам устройств FreeBSD

6005013 дней назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий

Обложка книги «FreeBSD Device Drivers»

FreeBSD: Драйверы устройств

От первых шагов к мастерству работы с ядром

автор: Edson Brandi · Версия 2.0 (апрель 2026)

Лицензия FreeBSD Страницы Статус Языки


Об этой книге

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 в реальных условиях, а не исчерпывающим спецификациям шин или устройств.

Чему вы научитесь

Книга разделена на семь частей, которые последовательно строятся друг на друге:

К концу вы напишете и загрузите собственные модули ядра, построите символьный драйвер, обработаете реальные прерывания и DMA, отладите панику ядра, профилируете свой драйвер под нагрузкой и пройдёте все шаги по внесению своей работы в проект FreeBSD.

Статистика книги

Полное оглавление

Нажмите, чтобы развернуть полный список глав

Часть 1: Основы FreeBSD, C и ядра

  1. Введение: от любопытства к вкладу
  2. Настройка вашей лаборатории
  3. Мягкое введение в UNIX
  4. Первый взгляд на язык программирования C
  5. Понимание C для программирования ядра FreeBSD
  6. Анатомия драйвера FreeBSD

Часть 2: Создание первого драйвера

  1. Написание вашего первого драйвера
  2. Работа с файлами устройств
  3. Чтение и запись на устройства
  4. Эффективная обработка ввода и вывода

Часть 3: Параллелизм и синхронизация

  1. Параллелизм в драйверах
  2. Механизмы синхронизации
  3. Таймеры и отложенные работы
  4. Очереди задач и отложенные работы
  5. Дополнительная синхронизация: условия, семафоры и координация

Часть 4: Интеграция с оборудованием и платформой

  1. Доступ к оборудованию
  2. Моделирование оборудования
  3. Написание драйвера PCI
  4. Обработка прерываний
  5. Продвинутая обработка прерываний
  6. DMA и высокоскоростная передача данных
  7. Управление питанием

Часть 5: Отладка, инструменты и практические приёмы

  1. Отладка и трассировка
  2. Интеграция с ядром

Как читать книгу

Рекомендуемый темп — одна глава в неделю при примерно пяти часах еженедельных занятий. Такой график позволяет освоить всю книгу в течение учебного года. Некоторые главы (особенно глава 4 по языку C и главы части 4 по оборудованию) естественно займут несколько недель.

Лабораторные работы настоятельно рекомендуются. Программирование ядра вознаграждает мышечную память так, как мало какая другая дисциплина. Один и тот же шаблон присоединения, одна и та же цепочка очистки, одна и та же форма блокировки повторяются из главы в главу и от драйвера к драйверу. Набирать эти шаблоны, компилировать их, загружать в работающее ядро и наблюдать, как они намеренно терпят сбой, — самый эффективный способ их усвоить.

Если вы уже знаете C, UNIX и общее устройство ядра ОС, примечания fast-path во всей части 1 укажут, какие разделы нужно читать внимательно, а какие можно пролистать.

Скачать книгу

Версия 2.0 уже доступна на странице релизов на трёх языках и в трёх форматах:

Вы также можете просматривать исходные файлы на Markdown непосредственно в каталоге content/ или собрать книгу самостоятельно с помощью скрипта scripts/build-book.sh.

О переводах

Английская версия является оригинальной и авторитетной версией книги. Бразильский португальский и испанский переводы выполнены с помощью ИИ и ещё не прошли полную техническую рецензию человеком. Они публикуются, чтобы сделать материал доступным для большего числа читателей, но могут содержать ошибки перевода, неудачные формулировки или технические неточности, возникшие при переводе.

Если что-то в переведённой версии кажется непонятным, непоследовательным или технически сомнительным, пожалуйста, обращайтесь к английской версии как к источнику истины. Помощь в рецензировании и улучшении переводов приветствуется (см. раздел Вклад в проект ниже).

Известные проблемы в версии 2.0

Это черновой релиз очень большой книги. Обратите внимание на следующее:

  • Некоторые блоки исходного кода в PDF, EPUB и HTML могут выходить за границы страницы или некорректно переноситься. Это проблемы представления, которые будут исправлены в будущих релизах; само содержимое верно.
  • Если какой-либо пример кода трудно читать в любом из скомпилированных форматов, файлы Markdown в этом репозитории являются источником истины. Откройте соответствующий файл в каталоге content/ для чистой версии.
  • Проверка переводов для pt_BR и es_ES запланирована на ближайшее будущее, по мере появления свободного времени у автора.

Структура репозитория```

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

root@kitploit:~
## Участие в проекте

Приветствуются любые виды вклада, включая исправления, уточнения, новые примеры, переводы и рецензии от разработчиков FreeBSD и учащихся.

### Способы внести вклад

- **Контент:** добавление новых глав, доработка существующего материала
- **Техническая рецензия:** проверка глав на соответствие FreeBSD 14.x
- **Рецензия переводов:** помощь в рецензировании и улучшении переведённых AI изданий **pt_BR** и **es_ES**; особенно приветствуются носители языка с опытом работы с FreeBSD/ядром
- **Новые переводы:** помощь в переводе книги на другие языки
- **Код:** улучшение примеров, сценариев сборки и инструментария
- **Issues:** сообщение об ошибках, фактических неточностях, неясных местах или проблемах форматирования

### Сообщение об issue

При создании issue, пожалуйста, укажите:

- Версию языка, который вы читали (`en_US`, `pt_BR`, `es_ES`)
- Используемый формат (PDF, EPUB, HTML или Markdown)
- Главу или раздел, в котором возникла проблема
- Краткое объяснение проблемы и, если есть, предлагаемое исправление

### Рабочий процесс

1. Форкните репозиторий
2. Создайте ветку: `git checkout -b feature/your-change`
3. Внесите изменения и протестируйте сборку с помощью `scripts/build-book.sh`
4. Сделайте коммит с понятным сообщением: `git commit -m "Chapter 18: clarify BAR mapping"`
5. Отправьте изменения и откройте Pull Request

Когда вы застряли при чтении книги, **создание issue помогает**. Если какой-то отрывок кажется неправильным или лабораторная работа неожиданно не удаётся, каждый отчёт делает путь следующего читателя более гладким.

## Часто задаваемые вопросы

### Зачем существует эта книга?

Честный ответ: Проекту FreeBSD нужны новые участники, а путь к работе с ядром и драйверами всегда был сложнее, чем следовало бы. Большинство существующих материалов предполагает, что вы уже знаете UNIX, хорошо знаете C, знаете, что такое шина, и умеете читать исходный код ядра. Это подходит для тех, кто уже прошёл большую часть пути. Но это мало помогает любопытному разработчику, который хочет начать.

Цель этой книги — снизить этот порог входа. Если хотя бы небольшое количество читателей дочитает её до конца и затем начнёт отправлять патчи, рецензировать код, писать новые драйверы или в конечном итоге станет коммиттерами FreeBSD, книга выполнит свою задачу. **Обучение следующего поколения участников FreeBSD — вот причина, по которой эта работа была написана**.

### Нужно ли знать C перед началом?

Нет. Главы 4 и 5 обучают C с нуля, уделяя внимание тем частям языка, которые важны для работы с ядром (указатели, структуры, расположение памяти, препроцессор и соглашения о вызовах). Если вы уже хорошо знаете C, боковые панели в этих главах подскажут, что можно просмотреть бегло, а что прочитать внимательно.

### Нужно ли знать UNIX или FreeBSD?

Нет. Глава 2 проведёт вас через установку FreeBSD в виртуальной машине или на "голое железо", а глава 3 знакомит с командной строкой UNIX, файловой системой, процессами, правами доступа и редакторами. К концу Части 1 у вас будет рабочая лаборатория и словарь для её использования.

### Нужно ли реальное оборудование?

Для большей части книги — нет. Виртуальной машины с FreeBSD 14.x достаточно для основ, первых глав о драйверах, параллелизма и синхронизации, а также большей части материалов по отладке. Реальное оборудование становится полезным (но всё ещё не строго обязательным), когда вы доходите до глав о PCI, прерываниях и DMA в Части 4. Эти главы написаны так, чтобы концепции были понятны, даже если вы запускаете их только в виртуальной машине.

### Поможет ли это мне писать драйверы для Linux?

Косвенно, да. Дисциплина программирования ядра хорошо переносится: стратегия блокировок, управление памятью, контекст прерываний, отображение DMA, различие между спящими и неспящими путями кода, порядок защитной очистки. Конкретные API различаются. После прочтения этой книги вы не будете знать модель устройств Linux, но вы узнаете её проблемы и форму её решений, и сможете гораздо легче читать Linux Device Drivers (LDD).

### Почему именно FreeBSD 14.x?

Каждый API, каждый пример и каждая лабораторная работа были спланированы для выполнения в дереве исходных кодов FreeBSD 14.3 и соответствующих страниц `man 9`. Ориентация на конкретный релиз позволяет книге быть точной в отношении сигнатур функций, расположения заголовочных файлов и поведения. Концепции переживут 14.x на много лет; точные номера строк и мелкие детали API — нет, и книга честна в этом.

### Является ли это официальной публикацией проекта FreeBSD?

Нет. Это независимая образовательная книга о разработке драйверов устройств FreeBSD. Это не официальная публикация проекта FreeBSD. Автор является коммиттером FreeBSD и членом команды разработки документации (DocEng), но книга отражает его работу и взгляды, а не официальную позицию проекта.

### Сколько времени это на самом деле займёт?

Если вы будете читать внимательно и выполнять лабораторные работы, планируйте около 200 часов общей работы. Это примерно 100 часов чтения и 100 часов практической лабораторной работы. При пяти часах в неделю это примерно шестимесячный вечерний проект; при десяти часах в неделю — интенсивный двухмесячный спринт. Чтение без выполнения лабораторных работ сокращает время примерно вдвое, но также снижает ценность: программирование ядра вознаграждает мышечную память так, как мало какие дисциплины.

### Могу ли я пропустить лабораторные работы?

Можете, но, вероятно, не стоит. Лабораторные работы — это то, где проза становится рефлексом. Шаблоны, такие как порядок подключения, развёртывание очистки и форма захвата блокировок, повторяются в каждой главе, и единственный надёжный способ их усвоить — набрать их, скомпилировать, загрузить в работающее ядро и намеренно наблюдать за их сбоями. Читатели, пропускающие лабораторные работы, сообщают о прогрессе, который сначала кажется гладким, а затем незаметно застревает примерно на Части 3 или Части 4.

### Как я могу внести вклад в FreeBSD после прочтения этой книги?

Глава 37 охватывает полный рабочий процесс подачи: как подготовить патч, как использовать Phabricator (система рецензирования кода FreeBSD), как найти коммиттера для спонсирования вашей работы, как отвечать на отзывы рецензии и как провести драйвер в дерево. Предыдущие главы формируют технические навыки; Глава 37 формирует социальный рабочий процесс. Важны оба.

### Книга огромна. С чего мне начать?

Начните с Главы 1, если у вас нет причин не делать этого. Книга накопительная; более поздние главы опираются на лексику и привычки, установленные ранее. Если вы уже знаете C, UNIX и общую структуру ядра ОС, заметки быстрого пути внутри Части 1 подскажут вам, что можно просмотреть бегло. Если вас привела сюда конкретная подсистема (USB, сеть, хранилище, PCI), можно внимательно прочитать Части 1 и 2, а затем перепрыгнуть вперёд, но ожидайте возвращаться назад, когда термины из предыдущих глав появятся снова.

### Я нашёл ошибку. Что мне делать?

Откройте issue на GitHub. Укажите версию языка, формат, который вы читали, главу или раздел, краткое описание проблемы и, если есть, предлагаемое исправление. Каждый отчёт делает опыт следующего читателя лучше. Проблемы перевода в изданиях pt_BR и es_ES особенно приветствуются, поскольку они ещё не прошли полную человеческую техническую рецензию.

### Книга действительно бесплатна?

Да. Она выпущена под лицензией MIT. Вы можете читать её, делиться, печатать, цитировать, развивать и переводить. Указание авторства приветствуется, но не требуется для личного использования. Если вы хотите поддержать работу, самые полезные вещи, которые вы можете сделать: рассказать другим о книге, создавать issue, когда находите проблемы, вносить рецензии или переводы и (если это в конечном итоге приведёт вас туда) отправлять свою собственную работу в проект FreeBSD.

## Об авторе

Я — Эдсон Бранди. Мой путь в технологии был далёк от обычного. Я начал как студент-химик в Unicamp в Бразилии в 1995 году, без планов работать с компьютерами, но с одним настойчивым вопросом: *как это на самом деле работает?* Этот вопрос привёл меня к FreeBSD, и FreeBSD с тех пор формирует мою карьеру.

В последующие годы я основал **Бразильскую группу пользователей FreeBSD (FUG-BR)**, совместно создал **Набор инструментов FreeBSD LiveCD**, а в 2002 году стал сооснователем **FreeBSD Brasil** — компании, предоставляющей обучение, консультации и поддержку FreeBSD, которая работает до сих пор. Я являюсь коммиттером FreeBSD и в настоящее время членом **Команды разработки документации FreeBSD (DocEng)**, помогая поддерживать системы, которые сохраняют документацию FreeBSD живой и доступной по всему миру.

Профессионально, я провёл свою карьеру в руководстве инфраструктурой и инженерией в различных отраслях, и сегодня я работаю IT-директором в финтех-компании в Лондоне.

Я написал эту книгу, потому что хочу, чтобы другие любопытные люди имели тот порог входа, которого у меня никогда не было. Вам не нужна степень в области компьютерных наук, чтобы писать код ядра. Вам нужны любопытство, настойчивость, терпение и руководство, которое встречает вас там, где вы находитесь.

Edson Brandi · [email protected]

## Лицензия

Эта книга и сопровождающий её исходный код выпущены под **лицензией MIT**. См. [LICENSE](https://github.com/ebrandi/fdd-book/blob/HEAD/LICENSE) для полного текста. Вы можете свободно читать, делиться и развивать эту работу; указание авторства приветствуется.

## Благодарности

- Сообщество разработчиков FreeBSD
- Все участники, рецензенты и переводчики
- Все, кто когда-либо создавал issue или задавал вопрос, который улучшил главу

## Ссылки

- **Репозиторий:** https://github.com/ebrandi/FDD-book
- **Issues:** https://github.com/ebrandi/FDD-book/issues
- **Обсуждения:** https://github.com/ebrandi/FDD-book/discussions
- **Автор:** Эдсон Бранди · [email protected]

---

<p align="center"><em>Если эта книга помогла вам, пожалуйста, поставьте звёздочку репозиторию и поделитесь ею с кем-то ещё, кто интересуется, как на самом деле работают компьютеры.</em></p>
Скачать инструмент
ЧастьНазваниеОсновное содержание
1Основы: FreeBSD, C и ядроНастройка лаборатории, UNIX, C для работы с ядром, анатомия драйвера
2Создание первого драйвераСимвольные драйверы, файлы устройств, read/write, ввод-вывод
3Параллелизм и синхронизацияПотоки, мьютексы, условные переменные, таймеры, очереди задач, семафоры
4Интеграция с оборудованием и платформойPCI, прерывания, MSI/MSI-X, DMA, управление питанием
5Отладка, инструменты и практические приёмыТрассировка, KGDB, продвинутая отладка, настройка производительности
6Драйверы для конкретных транспортных интерфейсовUSB, последовательные порты, накопители/VFS, сетевые драйверы
7Мастерство: особые сценарии и пограничные случаиПереносимость, виртуализация, безопасность, встраиваемые системы, обратная разработка, отправка в upstream
Страницы4 500+
Главы38
Приложения6
Время чтения~100 часов
Время на лабораторные~100 часов
Общее время обучения~200 часов (≈6 месяцев по 5 часов в неделю)
Целевой выпуск FreeBSD14.3
ЯзыкиАнглийский (оригинал) · Бразильский португальский (перевод с помощью ИИ) · Испанский (перевод с помощью ИИ)
ФорматыPDF · EPUB · HTML · Исходный код на Markdown
  • Продвинутые темы и практические советы
  • Часть 6: Драйверы для конкретных транспортных интерфейсов

    1. Драйверы USB и последовательных портов
    2. Работа с накопителями и уровнем VFS
    3. Написание сетевого драйвера

    Часть 7: Мастерство

    1. Переносимость и абстракция драйвера
    2. Виртуализация и контейнеризация
    3. Лучшие практики безопасности
    4. Device Tree и разработка для встраиваемых систем
    5. Настройка производительности и профилирование
    6. Продвинутые методы отладки
    7. Асинхронный ввод/вывод и обработка событий
    8. Создание драйверов без документации (обратная разработка)
    9. Отправка вашего драйвера в проект FreeBSD
    10. Заключительные мысли и следующие шаги

    Приложения

    • A: Справочник по API ядра FreeBSD
    • B: Алгоритмы и логика для системного программирования
    • C: Аппаратные концепции для разработчиков драйверов
    • D: Концепции операционных систем
    • E: Навигация по внутреннему устройству ядра FreeBSD
    • F: Тестовый стенд и результаты
    ЯзыкPDFEPUBHTML
    Английский (оригинал)PDFEPUBHTML
    Português (Brasil), перевод с помощью ИИPDFEPUBHTML
    Español, перевод с помощью ИИPDFEPUBHTML