Как собрать новое ядро linux
2011-04-01
Взято с: http://ebash.in/howto/Kak-sobrat-svoe-yadro-v-Debian-Etch
В каждом дистрибутиве имеется своя специфика сборки ядра и это HowTo ориентировано именно на то, как это сделать в Debian Etch. Так же раскрывается вопрос, как наложить тот или иной патч на ядро, когда необходима поддержка определенной функциональности или нового оборудования в Вашей системе. HowTo предназначено в первую очередь на более подготовленных пользователей и нет никаких гарантий, что этот способ будет работать так, как надо и все описанные действия и ответственность ложатся на Вас.
Примечание.
Будет описано два способа сборки ядра. Первым будет описан вариант сборки .deb пакетов, которые могут быть установлены в Вашей или другой системе. Второй метод, так называемый “traditional” way :-)
Способ первый. Сборка ядра в .deb пакеты.
Установка необходимых пакетов для компиляции ядра.
Для начала обновим списки пакетов:
# apt-get update
Установим нужные нам пакеты:
# apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential
Скачиваем исходники ядра.
Переходим в каталог /usr/src
, идем на www.kernel.org и выбираем нужную версию ядра. В данном случае будет рассмотрена версия linux-2.6.23.1.tar.bz2
. Скачиваем:
# cd /usr/src
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.1.tar.bz2
Распакуем исходники и создадим символьную ссылку:
# tar xjf linux-2.6.23.1.tar.bz2
# ln -sf linux-2.6.23.1 linux
# cd /usr/src/linux
Накладываем патчи.
Опционально и без необходимости не делайте этого!
Иногда требуются драйвера или средства, которые не поддерживаются в имеющемся ядре, например технология виртуализации или иная другая специфика, которой нет в текущем релизе. В любом случае это исправляется наложением так называемых патчей (если таковые имеются).
Итак, предположим вы скачали необходимый патч (для примера назовем patch.bz2
) в /usr/src
. Применим скачанный патч на наши исходники (Вы должны быть все еще в каталоге /usr/src/linux
):
# bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
# bzip2 -dc /usr/src/patch.bz2 | patch -p1
Первая команда – только тест и никакие изменения не будут применены к исходникам. Если после первой команды не было выдано никаких ошибок, можно выполнить вторую команду для применения патча. Ни в коем случае не выполняйте вторую команду, если после первой были выданы ошибки!
Таким образом Вы можете накладывать патчи на исходники ядра. Например, имеются некоторые особенности, которые доступны только в 2.6.23.8 ядре, а исходники не содержали необходимой функциональности, но выпущен патч patch-2.6.23.8.bz2
. Вы можете применить этот патч к исходникам ядра 2.6.23, но не 2.6.23.1 или 2.6.23.3 и т.д.
Предъисправления (препатчи) - эквивалентны альфа релизам; патчи должны быть применены к исходникам полного предыдущего релиза с 3-х значной версией (например, патч 2.6.12-rc4 может быть применен к исходникам версии 2.6.11, но не к версии 2.6.11.10.)
Это значит, если мы хотим собрать ядро 2.6.23.8, необходимо скачать исходники версии 2.6.23 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.gz) применительно во втором способе “traditonal” way!
Применяем патч patch-2.6.23.8.bz2 к ядру 2.6.23:
# cd /usr/src
# wget http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.22.8.bz2
# cd /usr/src/linux
# bzip2 -dc /usr/src/patch-2.6.23.8.bz2 | patch -p1 --dry-run
# bzip2 -dc /usr/src/patch-2.6.23.8.bz2 | patch -p1
Дополнение:
Можно скачать файлик с расширением patch в /usr/src/linux
и применить:
$ cat file.patch | patch -p1
Конфигурирование ядра.
Неплохой идеей будет использование существующего конфигурационного файла работающего ядра и для нового. Поэтому копируем существующую конфигурацию в /usr/src/linux
:
# make clean && make mrproper
# cp /boot/config-`uname -r` ./.config
Далее даем команду:
# make menuconfig
после которой загрузится графическое меню конфигурации ядра. Выбираем в меню конфигуратора пункт “Load an Alternate Configuration File” и нажимаем “Оk”. Затем (если требуется) сделайте необходимые изменения в конфигурации ядра перемещаясь по меню (подробности конфигурации ядра можно найти в www.google.com :-) ). Когда закончите и нажмете “Exit”, будет задан вопрос “Do you wish to save your new kernel configuration?”, отвечаем утвердительно “Yes”.
Компиляция ядра.
Сборка ядра выполняется всего в две команды:
# make-kpkg clean
# fakeroot make-kpkg --initrd --append-to-version=-cybermind kernel_image kernel_headers
После --append-to-version=
, можно написать любое название, какое Вам угодно, но оно должно начинаться со знака минус (-) и не иметь пробелов.
Процесс компиляции и сборки .deb пакетов может занят довольно продолжительное время. Все будет зависить от конфигурации ядра и возможностей Вашего процессора.
Установка нового ядра.
Когда удачно завершится сборка ядра, в каталоге /usr/src будут созданы два .deb пакета:
# cd /usr/src
# ls -l
linux-image-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb
- собственно само актуальное ядро и
linux-headers-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb
- заголовки ядра, необходимые для сборки других модулей (например при сборке модулей драйвера nVidia).
Инсталлируем их:
# dpkg -i linux-image-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb
# dpkg -i linux-headers-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb
(Эти пакеты теперь могут быть установлены на другой системе и собирать их заново уже не будет необходимости.)
Всё, инсталяция завершена, меню загрузчика, установка нового рамдиска и ядра будут сделаны автоматически. Остается только перезагрузиться:
# reboot
Способ второй. “traditional” way :-)
Выполняем все пункты, описанные выше ДО пункта “Компиляция ядра”.
Далее, традиционный способ:
# make all
# make modules_install
# make install
Как обычно, сборка может занять продолжительное время, зависящее от конфигурации ядра и возможностей процессора.
Следующие шаги:
Ядро собрано и установлено, но еще теперь необходимо создать рамдиск (без которого ядро просто не загрузится) и необходимо обновить загрузчик GRUB. Для этого выполним следующее:
# depmod 2.6.23.1
# apt-get install yaird
Установим рамдиск:
# mkinitrd.yaird -o /boot/initrd.img-2.6.23.1 2.6.23.1
Обновим легко и безболезненно загрузчик:
# update-grub
Всё, загрузчик и новое ядро готовы, остается только перезагрузиться:
# reboot
Проблемы.
Если после перезагрузки, выбранное вами новое ядро не загружается, перезагрузитесь и выберите Ваше предыдущее ядро и можно попробовать проделать весь процесс заново, чтоб собрать рабочееядро. Не забывайте в таком случае удалить строчки нерабочего ядра в /boot/grub/menu.lst
.
Ссылки: http://ebash.in/howto/Kak-sobrat-svoe-yadro-v-Debian-Etch http://www.linuxcenter.ru/lib/articles/system/kernel26_install.phtml http://www.opennet.ru/base/sys/install_linux_kernel.txt.html http://www.mr-h1z.com/linux/ubuntu/%D0%A1%D0%BE%D0%B1%D0%B8%D1%80%D0%B0%D0%B5%D0%BC-%D1%81%D0%B2%D0%BE%D0%B5-%D1%8F%D0%B4%D1%80%D0%BE-%D0%B4%D0%BB%D1%8F-%D1%83%D0%B1%D1%83%D0%BD%D1%82%D1%8B