Библиотека сайта rus-linux.net
Цилюрик О.И. Модули ядра Linux | ||
Назад | Предисловие | Вперед |
Структура книги
Исходя из целевого предназначения, построена и структура книги. Начинаем мы, без всяких предварительных объяснений, с интуитивно понятного всякому программисту примера написания простейшего модуля ядра. Только после этого мы возвращаемся к детальному рассмотрению того, чем же является модуль, и какое место он занимает в общей архитектуре Linux, и как он соотносится с ядром системы и приложениями пространства пользователя. Далее будет очень беглый обзор того инструмента, который мы «имеем в руках» про разработке модулей ядра.
Всё последующее описание — это разные стороны техники написания модулей ядра: управление памятью, взаимопонимание со службой времени, обработка прерываний, программные интерфейсы символьных и сетевых устройств ... и многое другое.
Текст этой книги (как и предшествовавший ему курс тренингов) ориентировался, в первую очередь, не столько для чтения или разъяснений, сколько в качестве справочника при последующей работе по программированию в этой области. Это накладывает отпечаток на текст (и обязательства на автора):
- Перечисления альтернатив, например символьных констант параметров, в случае их многочисленности приводится не полностью — разъясняются только наиболее употребимые, акцент делается на понимании...
- Обязательно указываются те места для поиска (заголовочные файлы, файлы описаний) где можно разыскать ту же информацию, актуальную в требуемой версии ядра; это связано с постоянными изменениями, происходящими от версии к версии.
- Подготовлено максимальное (в меру моих сил возможное) число примеров, иллюстрирующих изложение. Это не примеры гипотетические, описывающие фрагментарно как должно быть, все примеры законченные, исполнимые и проверенные.
- С другой стороны, эти примеры максимально упрощены, исключено всё лишнее, что могло бы усложнять их ясность. Хотелось бы предполагать, что такие примеры могут быть не только иллюстрацией, но стартовыми шаблонами, от которых можно оттолкнуться при написании своего кода того же целевого предназначения: берём такой шаблон, и начинаем редактированием наращивать его спецификой развиваемого проекта...
- Именно с этой целью (возможность последующего справочного использования) показаны и протоколы выполняемых команд: возможно, с излишней детализацией опций командной строки и показанного результата выполнения — для того, чтобы такие команды можно было воспроизводить и повторять, не запоминая их детали.
Некоторые стороны программирования модулей я сознательно опускаю или минимизирую. Это те вопросы, которые достаточно редко могут возникнуть у разработчиков программных проектов общего назначения: примером такой оставленной за рассмотрением техники является программирование драйверов блочных устройств — эта техника вряд ли понадобится кому либо, кроме самой команды разработчиков новой модели устройства прямого доступа, а они, нужно надеяться, являются уже профессионалами такого класса, что успешно сконструируют драйвер для своего устройства. Максимально сокращены и те разделы, по которым трудно (или мне не удалось) показать действующие характерные примеры минимально разумного объёма, а рассказа на качественном уровне, «на пальцах» - я старался избегать.
Во многих местах по тексту разбросаны абзацы, предваряемые выделенным словом: «Примечание:». Иногда это одна фраза, иногда пол-страницы и более... Это: необязательные уточняющие детали, обсуждение (или точнее указание) непонятных мне на сегодня деталей, где-то это «лирическое отступление» в сторону от основной линии изложения, но навеянное попутно... Если кого-то такие отступления станут утомлять — их можно безболезненно опускать при чтении.
В завершение, оформленные несколькими отдельными приложениями, приводятся:
- протокольное описание процесса сборки ядра Linux из исходных кодов ядра по шагам: вещь, которая должна быть хорошо известна любому системному программисту, но ... в качестве полезного напоминания;
- краткая справка по утилите make, с которой приходится работать постоянно - вещи хорошо известные, но в качестве памятки не помешает;
- пример интерфейса (проект DAHDI) к физическим линиям связи VoIP телефонных коммутаторов (PBX, SoftSwitch) — как образец наиболее обширного и развитого (из известных автору) приложений техники модулей ядра в Linux последних лет развития;
- исходный код тестов (примеры кода) динамического выделения памяти, обсуждение и результаты этих тестов - вынесены отдельным приложением из-за их объёмности и детальности.
В любом случае, текст этой книги произошёл от первоначального конспекта тренингового курса, проведенного с совершенно прагматическими намерениями для контингента профессиональных разработчиков программного обеспечения. Таким конспектом он и остаётся: никаких излишних подробных разъяснений, обсуждений... Хотелось бы надеяться, что он, совместно с прилагаемыми примерами кода, может быть отправной точкой, шаблоном, оттолкнувшись от которого можно продолжать развитие реального проекта, затрагивающего область ядра Linux.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Кому адресована эта книга | Соглашения принятые в тексте |