
- •Тема №5. Сборка ядра Linux
- •Введение
- •Зачем собирать ядро?
- •Какие бывают ядра Линукс?
- •Какие могут быть проблемы при сборке ядра?
- •Основные проблемы
- •Чтобы система после перезагрузке загрузилась с новым ядром, обязательно включите поддержку следующих опций монолитно:
- •Чтобы не ломать голову и не думать, почему не работает что-то, имейте в виду:
- •Сборка ядра (The Ubuntu Way)
- •Предварительные действия
- •/bin/sh в Ubuntu 6.10
- •Установка пакетов необходимых для сборки ядра
- •Получение исходников ядра
- •Конфигурирование ядра:
- •Сборка ядра
- •Установка нового ядра
- •Патчи ядра
- •Задание
Сборка ядра (The Ubuntu Way)
У каждого дистрибутива существует собственная методология и специфические утилиты для сборки ядра. Мы будем рассматривать сборку ядер лишь для систем из семейства Ubuntu, а если точнее для версий 6.10 и 6.06.
Предлагаемый метод сборки не является единственным или абсолютно верным.
Предварительные действия
Все последующие действия целесообразно выполнять под root'ом. Создать пользователя root можно следующим образом:
sudo passwd root
После чего переключаемся под root: su
Все необходимые действия можно выполнить и под обычным пользователем, но тогда не забывайте указывать sudo перед каждой командой.
Если написано apt-get update
вы должны писать sudo apt-get update
И так везде.
/bin/sh в Ubuntu 6.10
В Ubuntu 6.10, по умолчанию, /bin/sh является символической ссылкой на /bin/dash. Но с /bin/dash очень часто возникают проблемы, особенно при сборке программ из исходных текстов. В следствии этого лучше сделать /bin/sh символической ссылкой на /bin/bash.
rm -f /bin/sh
ln -s /bin/bash /bin/sh
Установка пакетов необходимых для сборки ядра
Для начала стоит обновить бд пакетов: apt-get update
Затем устанавливаем необходимые пакеты:
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2
Получение исходников ядра
Зайдите на www.kernel.org и выберите нужную вам версию исходников ядра, к примеру linux-2.6.18.1.tar.bz2 (все версию ядер ветки 2.6 можно найти здесь: http://www.kernel.org/pub/linux/kernel/v2.6/). Затем скачайте ядро и поместите в

директорию/usr/src: cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.1.tar.bz2
Распакуйте исходники и создайте символическую ссылку linux на директорию с исходники ядра:
tar xjf linux-2.6.18.1.tar.bz2 ln -s linux-2.6.18.1 linux cd /usr/src/linux
Конфигурирование ядра:
Рекомендуется использовать конфигурацию текущего работающего ядра как базис для нового ядра. Для этого копируем существующую конфигурацию в
директорию /usr/src/linux:
cp /boot/config-`uname -r` ./.config
Затем запустите make menuconfig
Появится конфигурационное меню. Переходим к пункту Load an Alternate Configuration File и выбираем .config (который содержит конфигурацию текущего рабочего ядра) в качестве файла конфигурации:

Далее конфигурируем новое ядро (используем приложение к лабораторной работе). После окончания конфигурирования выбираем пункт Exit, и сохраняем новую конфигурацию:
Сборка ядра
Для сборки ядра выполняем следующее: make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
В значении параметра --append-to-version= можно указать любую строчку (неплохой дополнительный идентификатор ядра), но она должна начинаться со знака минус (-)
и не должна содержать пробелы.
Ну вот ядро собирается. Сборка может занят продолжительное время. Все зависит от конфигурации ядра, скорости процессора и параметров оптимизации.
Установка нового ядра
После успешно сборки в директории /usr/src directory появятся два .deb пакета cd /usr/src
ls -l
К примеру (у вас ядро должно быть старше и названия будут красивше =) ), они могут называется следующим образом linux-image-2.6.18.1-custom_2.6.18.1- custom-10.00.Custom_i386.deb (само ядро) и linux-headers-2.6.18.1-custom_2.6.18.1- custom-10.00.Custom_i386.deb (файл необходимый для подключения дополнительных модулей ядра). Устанавливаем их следующим образом:
dpkg -i linux-image-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb dpkg -i linux-headers-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb
Все господа! Победа! Проверьте /boot/grub/menu.lst, и увидите два новых набора строк:
vi /boot/grub/menu.lst
Вот наборы строк для примера:
title |
Ubuntu, kernel 2.6.18.1-custom |
root |
(hd0,0) |
kernel |
/boot/vmlinuz-2.6.18.1-custom root=/dev/sda1 ro quiet splash |
initrd |
/boot/initrd.img-2.6.18.1-custom |
savedefault boot
title |
Ubuntu, kernel 2.6.18.1-custom (recovery mode) |
root |
(hd0,0) |
kernel |
/boot/vmlinuz-2.6.18.1-custom root=/dev/sda1 ro single |
initrd |
/boot/initrd.img-2.6.18.1-custom |
boot |
|
Теперь перезагружаем систему: shutdown -r now
Если все прошло удачно, то вы загрузитесь на новом ядре. В любом случае вы можете проверить текущую версию ядра системы:
uname -r
Если система не запускается, запустите систему со старым ядром. (Ведь вы не удалили его и соответствующие ему строчки в /boot/grub/menu.lst?)

Попытайтесь заново сконфигурировать новое ядро и собрать его. И не забудьте убрать строчки загрузки бракованного ядра из /boot/grub/menu.lst.