понедельник, 14 июля 2008 г.

Собираем ядро в Debian

Этя статья была переведена мной лично (оригинал статьи взят от сюда)
---
---
Рассмотрим вариант как собрать ядро получив в конечном итоге .deb пакет который можно будет установить в систему либо поделится с друзьями :)


--Установка требуемых пакетов для компиляции ядра--

-----------------------

Для начала обновим базу данных пакетов

----------
apt-get update
----------

Затем устанавливаем все нужные нам пакеты
----------
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential
----------


--Получение исходников ядра--

Затем нам требуестья скачать тебуемое нам ядро в /usr/src/
переходим на
www.kernel.org и выбираем ядро которое мы хотим установить
например linux-2.6.21.3.tar.bz2 (вы можете найти все 2.6 ядра здесь http: // www.kernel.org/pub/linux/kernel/v2.6/) и переходим непосредственно к скачиванию ядра
----------
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2
----------

Затем распаковываем ядро и создаём симлинк на директорию с исходниками ядра
----------
tar xjf linux-2.6.21.3.tar.bz2
ln -s linux-2.6.21.3 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
----------

Первая команда - просто тест, она ничего не делает с вашими исходниками. Если она не показала никаких ошибок то вы можете запускать вторую команду которая наложит патч на ваши исходники.
!!! Не делайте этого если первая команда выдала вам ошибки!!!!

You can also apply kernel prepatches to your kernel sources. For example, if you need a feature that is available only in kernel 2.6.22-rc3, but the full sources haven't been released yet for this kernel. Instead, a patch-2.6.22-rc3.bz2 is available. You can apply that patch to the 2.6.21 kernel sources, but not to kernel 2.6.21.1 or 2.6.21.2, etc. This is explained on http://kernel.org/patchtypes/pre.html:

Prepatches are the equivalent to alpha releases for Linux; they live in the testing directories in the archives. They should be applied using the patch(1) utility to the source code of the previous full release with a 3-part version number (for example, the 2.6.12-rc4 prepatch should be applied to the 2.6.11 kernel sources, not, for example, 2.6.11.10.)

So if you want to compile a 2.6.22-rc3 kernel, you must download the 2.6.21 kernel sources (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2) in step 3 instead of kernel 2.6.21.3!

This is how you apply the 2.6.22-rc3 patch to kernel 2.6.21:

----------

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

----------

--Конфигурируем ядро--

Неплохая идея использовать конфигурацию вашего текущего ядра как основу вашего нового ядра.
Для этого мы копируем текущую конфигурацию в
/usr/src/linux
:
----------
make clean && make mrproper
cp /boot/config-`uname -r` ./.config
----------

Затем запускаем
----------
make menuconfig
----------

что запустит конфигурационное меню ядра. Переходим в Load an Alternate Configuration File (загрузить альтернативный файл конфигурации) и выбираем .config (который содержит конфигурацию вашего текущего рабочего ядра) как конфигурационный файл.

Затем можете переходить в меню конфигурирования ядра и делать свои изменения. Когда вы закончите и выбирете Exit ответьте на вопрос (Do you wish to save your new kernel configuration?) да (YES).

-- Сборка ядра --

Чтобы собрать ядро выполните две команды
----------
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
----------


После --append-to-version= вы можете написать любую строку которая поможет вам идентифицировать ваше ядро, но она должна начинатся с минуса (-) и недолжна содержать пробелов.
Теперь будте терпеливы сборка ядра процесс продолжителный и может продолжатся несколько часов. в зависимости от конфигурации ядра и скорости процессора.

--Установка нового ядра--

После того как ваше ядро удачно соберется вы найдете два пакета .deb в директории /usr/src
----------
cd /usr/src
ls -l
----------

На моей тестовой системе были следующие файлы
linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (Который содержит актуальное ядро) и linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (который содержит файлы которые вам понадобятся если вы захотите собрать дополнительные ядерные модули позже) устанавливаем их:
----------
dpkg -i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg -i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
----------

(Вы можете скопировать эти файлы на другую Debian систему и установить их там таким-же способом чтобы не собирать ядро заново)

Вот и все ! :)
Конфигурационный файл загрузчика GRUB будет изменен автоматически, и рамдиск для нового ядра будет создан в /boot
теперь перегружаем систему
----------
shutdown -r now
----------

В загрузочном меню выбирайте ваше новое ядро (будет выбрано по умолчанию):
Если все нормально и вы загрузились в ваше новое ядро, надо проверить, действительно ли вы используете новое ядро
----------
uname -r
----------

должно появится чтото вроде..
2.6.21.3-custom

Если система не стартует - перегружайтесь и выбирайте в меню загрузки ваше старое ядро. Пробуйте пересобрать ядро снова но незабудте удалить строки о вашем не работающем ядре из /boot/grub/menu.lst.

Комментариев нет: