Компиляция ядра
В этом разделе мы рассматриваем материал по теме 2.201.2
экзамена 201 Администрирование, средний уровень
(LPIC-2). Рейтинг темы 1.
Получение исходников ядра
Первое, что нужно сделать, чтобы скомпилировать новое ядро,
-- получить его исходные коды. Основное хранилище исходников
ядра -- Linux Kernel Archives (kernel.org; см. Ресурсы). Производитель вашего
дистрибутива мог включить в него обновленные исходники ядра,
чтобы показать внесенные изменения. Например, вы можете
получить и распаковать версию ядра с командами, подобными
следующим:
Листинг 1. Получение и
распаковка ядра
% cd /tmp/src/
% wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.12.tar.bz2
% cd /usr/src/
% tar jxvfy /tmp/src/linux-2.6.12.tar.bz2
|
Для распаковывания исходников ядра а каталог /usr/src/ вам понадобятся права
root'а. Однако, вы можете распаковать и собрать ядро в своем
домашнем каталоге. Поищите на kernel.org другие форматы архивов
и протоколов загрузки.
Проверка исходников ядра
Если вы благополучно получили и распаковали архив с
исходниками ядра, в вашей системе должен появиться
каталог /usr/src/linux-2.6.12 (или, если вы
распаковывали архив в другом месте, каталог с похожим
названием). Важно, что тот каталог должен содержать файл
README с текущей информацией. В этом каталоге
содержатся подкаталоги с исходными файлами, в основном
это файлы .c и .h. Главные действия по объединению
этих файлов в работающее ядро прописаны в файле Makefile, который использует
утилита make.
Конфигурирование
сборки
После получения и распаковывания исходников ядра у вас может
появиться желание сконфигурировать ядро. Команда make имеет три опции для настройки
опций ядра: config, menuconfig и xconfig.
Вообще, можно отредактировать
файл .config, но делать это нежелательно
(вы откажетесь от дополнительной информации и можете легко создать нерабочую конфигурацию).
Командой make config воспользоваться также непросто,
как и отредактировать файл .config вручную; вам придется настраивать
каждую опцию (их сотни) в определенном порядке, без
возможности возврата к предыдущему действию. Команда
make menuconfig предоставляет
curses интерфейс, где вы можете выбрать только те опции,
которые необходимо изменить.
Команда make xconfig предоставляет симпатичный
графический интерфейс (особенно красивый в Linux 2.6+).
Для значительной части опций ядра возможны три варианта
выбора: (1) включить компоненту в базовое ядро (include
the capability in the base kernel) ; (2) включить как
модуль ядра (include it as a kernel module); (3) совсем
не включать компоненту (omit the capability
entirely). Вообще, в создании многочисленных модулей
ядра нет ничего страшного (кроме незначительного
увеличения времени компиляции), поскольку пока они не
нужны, они и не загружены. Если дисковое пространство
ограничено, можно не включать никаких возможностей.
Запуск процесса
сборки
Теперь, чтобы собрать базовое ядро с выбранными опциями,
следует выполнить следующие действия:
-
make dep: необходимо только
для ядра 2.4, для 2.6 не требуется.
-
make clean: очистить
предыдущие объектные файлы, это особенно полезно, если
вы собираете данное ядро не первый раз.
-
make bzImage: создать базовое
ядро. В особых случаях для небольших образов ядра
можно использовать make zImage. Вы также можете
воспользоваться командой make zlilo, чтобы установить
ядро прямо в загрузчик lilo, или командой make zdisk, чтобы создать
загрузочную дискету. Вообще, лучше создавать образ
ядра в каталоге типа /usr/src/linux/arch/i386/boot/vmlinuz, используя команду make bzImage, и затем копировать его оттуда вручную.
-
make modules: создать все сконфигурированные загружаемые модули ядра.
-
sudo make modules_install: установить все собранные модули в каталог /lib/modules/2.6.12/, название подкаталога совпадает с номером версии ядра.
Создание стартового ram-диска
Если вы создали важный загрузочный драйвер, стартовый
ram-диск позволит загрузить его в процессе начальной
загрузки. Это касается главным образом тех драйверов файловой
системы, которые были собраны в виде модулей ядра. По существу,
стартовый ram-диск -- некий магический корневой псевдо-раздел, который живет в памяти и позже выполняет chroot на реальный раздел диска (например, если ваш корневой раздел расположен на RAID). Более подробное описание вы найдете в следующих учебных пособиях этой серии.
Создание стартового ram-диска осуществляется при помощи команды mkinitrd. Чтобы узнать, какие опции имеет команда mkinitrd, включенная в ваш дистрибутив Linux, обратитесь к странице man этой команды. Самое простое -- запустить команду, подобную следующей:
Листинг 2. Создание ram-диска
% mkinitrd /boot/initrd-2.6.12 2.6.12
|
Инсталляция
собранного ядра Linux
Успешно собрав базовое ядро и связанные с ним модули (это
займет какое-то время -- на медленных машинах до нескольких часов), вы должны скопировать образы ядра (vmlinuz или bzImage) в свой каталог
/boot/.
После того как вы скопировали необходимые файлы в /boot/ и установили модули ядра при помощи make modules_install, необходимо сконфигурировать загрузчик, обычно это lilo или grub, для доступа к соответствующему ядру (ядрам). Информацию о конфигурировании lilo и grub вы найдете в следующем учебном пособии этой серии.
Дополнительная информация
На сайте kernel.org есть много полезных ссылок, по которым можно получить дополнительную информацию о компонентах ядра и требованиях для сборки. Чрезвычайно полезная и подробная информация содержится в руководстве Kernel Rebuild Guide Квана Лоу (Kwan Lowe). Ссылки на эти ресурсы вы найдете в разделе
Ресурсы.
|