Разработка ядра Linux
Шрифт:
Таблица 2.1. Каталоги в корне дерева исходных кодов ядра
Каталог | Описание |
---|---|
arch | Специфичный для аппаратной платформы исходный код |
crypto | Криптографический API |
Documentation | Документация исходного кода ядра |
drivers | Драйверы устройств |
fs | Подсистема VFS и отдельные файловые системы |
include | Заголовочные
|
init | Загрузка и инициализация ядра |
ipc | Код межпроцессного взаимодействия |
kernel | Основные подсистемы, такие как планировщик |
lib | Вспомогательные подпрограммы |
mm | Подсистема управления памятью и поддержка виртуальной памяти |
net | Сетевая подсистема |
scripts | Сценарии компиляции ядра |
security | Модуль безопасности Linux |
sound | Звуковая подсистема |
usr | Начальный код пространства пользователя (initramfs) |
Некоторые файлы, которые находятся в корне дерева исходных кодов, также заслуживают внимания. Файл
Сборка ядра
Сборка ядра достаточно проста. Это может показаться удивительным, но она даже более проста, чем компиляция и инсталляция других системных компонентов, как, например библиотеки
Так как доступен исходный код ядра Linux, то, это означает, что есть возможность сконфигурировать ядро перед компиляцией. Есть возможность скомпилировать поддержку только необходимых драйверов и функций. Конфигурация ядра— необходимый этап перед тем, как его компилировать. Поскольку в ядре бесчисленное количество функций и вариантов поддерживаемого аппаратного обеспечения, возможностей по конфигурации, мягко говоря, много. Конфигурация управляется с помощью опций конфигурации в виде
Конфигурационные переменные бывают двух видов: логические (boolean) и переменные с тремя состояниями (tristate). Логические переменные могут принимать значения
Конфигурационные параметры могут иметь целочисленный, или строковый, тип. Эти параметры не контролируют процесс сборки, а позволяют указать значения, которые встраиваются в исходный код ядра с помощью препроцессора. Например, с помощью конфигурационного параметра можно указать размер статически выделенного массива.
Ядра, которые включаются в поставки ОС Linux такими производителями, как Novell и Redhat, компилируются как часть дистрибутива. В таких ядрах обычно имеется большой набор различных функций и практически полный набор всех драйверов устройств в виде загружаемых модулей. Это позволяет получить хорошее базовое ядро и поддержку широкого диапазона оборудования. К сожалению, как разработчикам ядра, вам потребуется компилировать свои ядра и самим разбираться, какие модули включать, а какие нет.
В ядре поддерживается несколько инструментов, которые позволяют выполнять конфигурацию. Наиболее простой инструмент — это текстовая утилита командной строки:
Эта утилита просматривает все параметры один за другим и интерактивно запрашивает у пользователя, какое значение соответствующего параметра установить —
или графическую утилиту на основе системы X11:
или еще более удобную графическую утилиту, основанную на библиотеке gtk+:
Эти утилиты позволяют разделить все параметры по категориям, таким как Processor Features (Свойства процессора) и Network Devices (Сетевые устройства). Пользователи могут перемещаться по категориям и, конечно, изменять значения конфигурационных параметров. Команда
позволяет создать конфигурационный файл, который будет содержать параметры, используемые по умолчанию для текущей аппаратной платформы. Хотя эти параметры и достаточно общие (ходят слухи, что для аппаратной платформы i386 используется конфигурация Линуса), они являются хорошей стартовой точкой, если вы никогда перед этим не занимались конфигурацией ядра. Чтобы все сделать быстро, необходимо выполнить эту команду, а потом проверить, включена ли поддержка всех нужных аппаратных устройств.
Конфигурационные параметры содержатся в корне дерева каталогов исходного кода ядра в файле с именем
Кстати, перед сборкой ядра эту команду также необходимо выполнить. После того как конфигурация ядра выполнена, можно выполнить сборку с помощью команды:
В отличие от предыдущих серий ядер, в версии 2.6 больше нет необходимости выполнять команду