Cборка и компилирование ядра Linux

[1]---// Intro

Замечательной чертой Linux-подобных осей является то, что при необходимости
можно не только изменить некоторые системные параметры, но и полностью
перекомпилировать всю ось! Чем мы в сущности и займемся...

[2]---// Этапы сборки ядра

-> 1 Приобретение исходников ядра.
-> 2 Подготовка каталогов с исходниками ядра.
-> 3 Конфигурирование ядра.
-> 4 Компиляция ядра и установка модулей.
-> 5 Перемещение ядра.
-> 6 Настройка и запуск lilo.

Для нормальной сборки и компиляции ядра следует выполнять все этапы по порядку.
Рассмотрим каждый из этапов подробнее...

1. Приобретение исходников ядра:

Исходники своего ядра можно найти на дистрибутиве со своей осью. Но на нем не
всегда последняя версия ядра =(. Исходники последней версии ядра для Linux можно
найти на ftp://ftp.kernel.org (или на каком-нибудь зеркале). Там ядра лежат в
/pub/linux/. Загрузи ядро себе на хард и помести его в каталог /usr/src. Там-же
создай каталог для файлов и каталогов ядра (обычно создают что-то типа
linux-2.X.X, где 2.X.X - версия нового ядра) командой mkdir linux-2.X.X. После
этого создай связь с каталогом linux (ln -s linux-2.X.X linux).
Если каталог linux-2.X.X уже существует, то его предварительно надо удалить.
Ну все, вроде сырцы нашли, да папку создали... Продолжаем...

2. Подготовка каталогов с исходниками ядра.

После успешно завершенного этапа 1 пришло время подготовить древо каталогов для
файлов исходных кодов ядра.

Синтаксис команды для восстановления древа зависит от формата скаченного файла.
В нашем случае это могут быть файлы linux-2.X.X.tar.gz и linux-2.X.X.tar.bz2.
Для каждого из файлов используется определенный набор команд.

Для linux-2.X.X.tar.gz:

tar xzvf linux-2.X.X.tar.gz

Для linux-2.X.X.tar.bz2:

bzcat linux-2.X.X.tar.bz2 | tar xv

При выполнении этих команд содержимое файлов развернется в каталог,
определенный связью linux. После этого командой cd перейди в каталог linux
(cd linux). Этот каталог называется каталогом верхнего уровня исходного древа.

В нем много каталогов, одним из которых является documentation, в котором
хранится дополнительная информация по ядру.

Для начала компиляции нового ядра выполни команду:

make mrproper

Ядро скомпилировано... Попробуем его настроить для своих потребностей...

3. Конфигурирование ядра.

На этом этапе придется выбрать опции, которые будут использоваться в новом
ядре. Не обязательно вникать в подробности массы опций. В большинстве из них
можно воспользоваться настройками по умолчанию (плохо не посоветуют =)).

Существуют три метода создания файла конфигурации, используемого при сборке
нового ядра (подробно опишу метод 3):

1 make config
2 make menuconfig
3 make xconfig

make config - это наиболее простой пошаговый сценарий.

make menuconfig - это более удобный метод (требует наличие ncurses).

make xconfig - это графическая утилита для настройки ядра. Перед тем, как ей
воспользоваться необходимо перейти в среду X Window. После выполнения этой
команды сначала скомпилируются необходимые элементы, затем появится диалоговое
окно.

Для каждой из представленных опций есть 3 установочных параметра: y,m,n.
y(yes) - Включает или встраивает опцию в ядро.
m(module) - Создает для выбранной опции загружаемый в динамическом режиме
модуль (без reboot'a). Существует не для всех опций.
n(no) - Отключает поддержку опции.

Для использования конфигуратора на базе X в системе должны буть установлены
библиотеки TCL/TK.

Вроде все... Ядро настроено...

4. Компиляция ядра и установка модулей.

В свою очередь этот этап делится на шаги:
1 Подготовка

-> make dep
-> make clean

2 Непосредственно сборка ядра

-> make bzImage|bzdisk|bzlilo

3 Сборка и установка модулей

-> make modules
-> make modules_install

Первый из них - make dep и make clean - являются типа подготовкой. После
выполнения make dep создаются файлы зависимостей (.depend), которые располаются
в каждом из подкаталогов древа исходных кодов. Если нет нарушений в расположении
компонентов древа, то процесс пройдет спокойно. Далее используется команда
make clean, которая удалит все лишние (вспомогательные) файлы, созданные от
предыдущих процессов компиляции.

Далее идет шаг, при котором необходимо непосредственно собрать ядро. Для сборки
ядра придется выбрать одну из 3-х команд: make bzImage, make bzdisk или make
bzlilo. Каждая из команд выполняет фактически одну и ту-же операцию, только
две последние выполняют одно дополнительное действие.

Рассмотрим подробнее каждую из команд:

make bzImage - стандартная операция, при которой будет только скомпилировано
ядро. Если все прошло без проблем, то созданное в результате компиляции ядро
будет расположено в каталоге /usr/src/linux/arch/i386/boot. В этом случае ядру
присваивается имя bzImage. Диспетчер загрузки lilo|grub должен найти это ядро и
загрузить его. Для этого достаточно скопировать файл bzImage и выполнить команду
lilo для переустановки диспетчера загрузки.

make bzdisk - этот метод позволяет выполнить практически ту-же задачу, что и
bzImage, но после завершения компиляции будет автоматически выполнено
копирование нового ядра на дискету. В дальнейшем эту дискету можно будет
использовать для загрузки системы.

make bzlilo - это рекомендуемый метод формирования и инсталляции нового ядра,
требующий предварительной подготовки lilo. При использовании этого метода
map-файл ядра не перемещается в другой каталог. Более того новое ядро может быть
записано поверх уже существующего, причем записано с ошибками, поэтому его
использование не рекомендуется. Этот метод очень похож на bzImage и отличается
только наличием дополнительной операцией, которая выполняется после совершения
компиляции ядра. После компиляции ядра происходит копирование файлов созданного
ядра в каталог / в качестве vmlinuz (при этом сохраняется резервная копия
файла vmlinuz), затем выполняется команда lilo, в результате чего происходит
переустановка диспетчера загрузки (и распознавание нового ядра).

Третим шагом является сборка и установка модулей ядра.

Этот процесс выполняется с помощью 2-х команд make modules и
make modules_install. Название команды make modules говорит само за себя: при
выполнении этой команды происходит сборка модулей, которые соответствуют ядру,
созданному на предыдущем этапе. Команда make modules_install, в сою очередь,
перемещает созданные модули из исходного древа ядра в каталог
/lib/modules//kernel/. В качестве типа модуля
() используется имя категории, к которой относятся созданные
модули (Например: block, misk, net, pcmcia, etc...).

5. Перемещение ядра.

После завершения процесса сборки тебе необходимо инсталлировать как ядро, так
и его map-файл в каталог, где они будут постоянно находиться (/boot).
Скопируй (или перемести) файл System.map в каталог /boot, добавив номер версии
ядра в конец строки:

cp System.map /boot/System.map-2.X.X

Затем точно так-же скопируй (или перемести) и само ядро:

cp arch/i386/boot/bzImage /boot/bzImage-2.X.X

Когда ядро и map-файл будут на своем новом месте жительства тебе останется
выполнить только два коротких действия, после которых ты сможешь перезагрузиться
уже с новым ядром (или со старым, если возникнут траблы =)).

6. Настройка и запуск lilo.

Диспетчер загрузки lilo дает возможность определить несколько образов загрузки.
Вставив новый раздел образа в файло /etc/lilo.conf можно получить дополнительный
образ загрузки. Для этого необходимо продублировать последние 6 строк файла и
изменить адрес до загружаемого ядра.

старый lilo.conf, последние 6 строк)

image = /boot/<Уже стоящее в системе ядро>
lable = linux
root = /dev/hda1
vga = 274
read-only
append = "debug=2 noapic nosmp"

Покоцано (Модифицированный lilo.conf с )

image = /boot/<Уже стоящее в системе ядро>
lable = linux.orig
root = /dev/hda1
vga = 274
read-only
append = "debug=2 noapic nosmp"
image = /boot/<Новое ядро>
lable = linux
root = /dev/hda1
vga = 274
read-only
append = "debug=2 noapic nosmp"

Обрати внимание на lable = linux.orig (это метка старого ядра).
После конфигурации файла /etc/lilo.conf следует пеановить диспетчер
начальной загрузки системы. Для этого выполни следующие команды:

# lilo
Added linux *
Added linux.orig

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

[3]---// Outro

все... Надеюсь что все вышеописанное в статье вам как-либо образом поможет...

/=====================================\
| (С) DKCS security team
| Автор: Dr.Pixel
| E-mail: usama13@rambler.ru
| Url: http://DKCS.void.ru
\=====================================/

RSS-материал