Страницы

Сохранить статью у себя в соцсети:

четверг, 25 октября 2012 г.

§ Linux kernel build.

Сборка Linux ядра.

Как часто вы собираете ядро? Не умеете? Тогда это статья для Вас.
Где найти исходные коды ядра?
Самые последние версии ядра Linux можно найти на kernel.org. Также можно взять самый свежий срез из git репозитория.

Что нужно для сборки ядра?
Для работы понадобятся git, ncurses-dev, make, gcc, ctags. Названия этих пакетов могут отличаться в зависимости от дистрибутива. Для их установки в Debian/Ubuntu следует выполнить 
# aptitude install libncurses5-dev gcc make git exuberant-ctags

Какое ядро собирать?
Лучшим выбором будет последнее стабильное ядро или последний кандидат в релизы (rc - release candidat).
Для начала, развернем у себя стабильную ветку ядра
# git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
# cd linux-stable

Теперь следует найти последнее ядро помеченное как стабильное
# git tag -l |less

Самое последнее стабильное ядро можно определить по самым большим числам версий vX.Y.Z. Версии имеющие в своем названии -rcX являются кандидатами в релиз и их нельзя с уверенностью рассматривать как стабильные.
Определившись с версией, можно переключиться в нее (например v3.6.3)
# git checkout -b stable v3.6.3

Для загрузки последнего кандидата в релиз можно использовать репозиторий Л.Торвальдса
# git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
# cd linux.git

Настраиваем конфигурацию ядра.
Множество драйверов ядра могут как включены, так и выключены, или же они могут быть собраны как часть ядра или как модуль. Конфигурация хранится в файле .config и определяет какие драйвера будут собраны. Загрузка дерева исходных кодов выполняется без файла конфигурации. Существует возможность использовать конфигурацию текущего, запущенного ядра. Как правило, все конфигурации хранятся в каталоге /boot. Да, конфигурации может быть несколько. Найти конфигурацию ассоциированную с запущенным ядром можно с помощью "uname -a". Найденную конфигурацию нужно скопировать в каталог с исходными кодами.
# cp /boot/config-`uname -r`* .config

Запуск меню конфигурирования ядра
# make menuconfig

Запуск сборки с конфигурацией по умолчанию 
# make defconfig

Запуск сборки
# make

Учитывая что большинство современных машин имеют несколько ядер, то процесс сборки можно запустить с использованием нескольких ядер (например 4)
# make -j4 

Установка ядра
Для установки ядра необходимо вручную отредактировать конфигурацию загрузчика или использовать скрипт автоматической установки ядра (такой скрипт есть в Ubuntu - /sbin/installkernel). Этот скрипт выполняет установку ядра в /boot, устанавливает модули в /lib/modules/ и делает обновление конфигурации загрузчика. При наличии скрипта следует выполнить установку модулей и ядра
# sudo make modules_install install

Обновление конфигурации GRUB (для GRUB-2)
# grub2-mkconfig -o /boot/grub/grub.cfg

Загрузка в новое ядро
После установки модулей, ядра и обновления конфигурации следует перезагрузиться и при необходимости выбрать ядро из списка в меню grub. Загрузчик как правило предлагает возможность выбора между ядрами на начальном этапе загрузки компьютера, но многие дистрибутивы скрывают эту возможность. Чтобы отразить меню grub нужно нажимать ESC после того как исчезнет экран инициализации BIOS. Если же есть необходимость, чтобы меню отображалось постоянно, то можно включить это в конфигурации grub. Нужно удалить строку GRUB_HIDDEN_TIMEOUT_QUIET из файла /etc/default/grub и при следующей загрузке будет показано меню выбора ядер. Также можно увеличить время отображения меню перед тем как будет сделан выбор ядра по умолчанию, за это отвечает параметр GRUB_TIMEOUT. После того как правка конфигурации завершена нужно выполнить команду update-grub2.

Наложение патчей на ядро.
Существует несколько способов наложить патч. Как правило разработчик отправляет свйо патч в виде отдельного файла приложенного к письму. Этот файл можно сохранить и затем наложить на исходные корды ядра, после чего выполнить сборку. Для того чтобы выполнить наложение, нужно перейти в корневой каталог исходных кодов и выполнить команду
# patch -p1 < patchfile

Если наложение патча прошло неудачно, можно откатить изменения и попытаться наложить патч другим способом
# git reset --hard HEAD
# git am -3 patchfile

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

Пересборка отдельного модуля.
Если в системе есть драйвер собраный в качестве модуля, то можно пересобрать его отдельно, не прибегая к пересборке всего ядра. Такой способ позволяет сохранить массу времени. Все файлы модулей оканчиваются расширением .ko. Чтобы запустить сборку одного модуля нужно выполнить make с указанием файла модуля. Запуск нужно выполнять из корневого каталога исходных кодов.
# make drivers/usb/host/xhci-hcd.ko

После пересборки, модуль можно перезагрузить не прибегая к полной перезагрузке системы
# rmmod xhci-hcd 
# insmod drivers/usb/host/xhci-hcd.ko

На главную "Virtualizing Linux"

1 комментарий:

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика