Этапы сборки ядра
- Скачивание исходников ядра.
- Подготовка каталогов с исходниками ядра.
- Конфигурирование ядра.
- Компиляция ядра и установка модулей.
- Перемещение ядра.
- Настройка и запуск lilo.
- Настройка и запуск Grub.
Для нормальной сборки и компиляции ядра следует выполнять все этапы по порядку.
1. Скачиваем исходники ядра:
Качаем себе новое ядро с сайта http://kernel.org/ и распаковываем его в каталог /usr/src/linux-2.X.X, где 2.X.X — версия нового ядра) с помощью
tar xzvf linux-2.X.X.tar.gz
или
bzcat linux-2.X.X.tar.bz2 | tar xv
После этого создай связь с каталогом linux (ln -s linux-2.X.X linux). Если каталог linux-2.X.X уже существует, то его предварительно надо удалить.
2. Подготовка каталогов с исходниками ядра.
Для начала компиляции нового ядра выполни команду:
make mrproper
3. Конфигурирование ядра.
На этом этапе придется выбрать опции, которые будут использоваться в новом
ядре. Не обязательно вникать в подробности массы опций. В большинстве из них
можно воспользоваться настройками по умолчанию.
Существуют три метода создания файла конфигурации, используемого при сборке
нового ядра:
- make config
- make menuconfig
- 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-version>/kernel/<module-type>. В качестве типа модуля
(<module-type>) используется имя категории, к которой относятся созданные
модули (Например: 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
Все. Если все прошло без ошибок, то пора перезагрузить систему.
В случае, если новое ядро является причиной некорректной работы системы во
время ее загрузки, то ты можешь воспользоваться исходным ядром. Для загрузки
системы необходимо ввести имя метка желаемого образа загрузки. Чтобы вывести
на экран перечень доступных меток следует нажать на клавишу <Tab>.
7. Настройка и запуск Grub.
Прописываем новое ядров конфиг (/boot/grub/menu.lst)
title linux 2.6.28
kernel (hd0,4)/boot/bzImage-2.6.28 BOOT_IMAGE=linux_2.6.28 root=/dev/hda5 resume=/dev/hda1 splash=silent vga=788
initrd (hd0,4)/boot/initrd-2.6.28.img
т.к. без initrd у меня не запускалось, создаем его так:
/sbin/mkinitrd /boot/initrd-2.х.хх.img 2.х.хх
Теперь можно перезагружаться и загружать новое ядро.
все… Надеюсь что все вышеописанное в статье вам как-либо образом поможет…
Дополнение.
По этой инструкции обновлял ядро на CentOS 5.5 но при загрузке выдавало что не может смонтировать /dev/root (mount: could not find filesystem ‘/dev/root’)
Решение :
в конфиг добавлена опция
CONFIG_SYSFS_DEPRECATED_V2=y