Компиляция ядра — Ubuntu way

17 Фев
2008

Прежде чем приступить, попробуем вначале ответить на вопрос: А зачем собственно нужна пересборка ядра? Большинство современных пользователей Linux редко задумываются о том, какое у них установлено ядро, какие функции в нем заложены, чего там не хватает, и тем более о том, что его можно (и нужно) обновлять или пересобирать под конкретные нужды.

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

Чтобы найти пакеты, имеющие отношение к ядру, используйте репозитарий своего дистрибутива, например в Ubuntu и других системах использующих менеджер APT, чтобы получить весь список достаточно ввести:

$ sudo apt-cache search kernel

Второй причиной пересборки ядра является его оптимизация и уменьшение его размера. Пользователь или администратор может просто захочет собрать систему, собранную под свою марку процессора. Или модифицировать системные параметры, например включить поддержку большого количества памяти, дисковых квот, поддержку файловых систем и многое другое. Еще одна причина это устранение ошибки, найденной в ядре или одном из драйверов. И наконец — проба новых возможностей недоступных в дистрибутиве, а доступных пока только в виде патча. Да может и просто захочется попробовать свои силы в сборке нового ядра.

 

 

 

Компиляция ядра со сборкой пакета в Debian/Ubuntu

Установленное обычным образом ядро (то есть стандартная компиляция) не будет видно менеджеру пакетов, в принципе это возможно и не нужно. Но удалить ядро установленное при помощи менеджера пакетов проще, обновление ядра из репозитария также пройдет без сучка и задоринки. Поэтому лучше вначале собрать пакет, который установить принятым в дистрибутиве способом. В большинстве дистрибутивов такая возможность естественно предусмотрена. В Debian/Ubuntu это просто. Вначале обновляем базу данных приложений, чтобы загрузить самые последние доступные версии пакетов.

$ sudo apt-get update

Теперь установим все необходимые для сборки пакеты.

$ sudo apt-get install kernel-package libncurses5-dev fakeroot wget

Пакет kernel-package содержит исходные тексты ядра, которые будут распакованы в /usr/src. Вместо него можно использовать и любое другое ядро с патчами.

Если нет make, gcc и прочего, то и:

$ sudo apt-get install build-essential

Для упрощения берем настройки текущего ядра, который будем использовать как базовый, и копируем текущую конфигурацию в /usr/src/linux.

$ sudo cp /boot/config-`uname -r` /usr/src/linux/.config

В некоторых дистрибутивах просмотреть содержимое файла .config с которым собрано ядро можно обратившись к файлу /proc/config.gz, его можно взять за основу при дальнейших настройках. Рабочий .config лучше сохранять, это просит последующие пересборки ядра.

Далее при необходимости конфигурируем его введя одну из команд: make config, make menuconfig, make xconfig, make gconfig или make oldconfig.

Для компилляции и сборки deb-пакета вводим следующую команду.

$ sudo make-kpkg clean fakeroot make-kpkg —initrd —append-to-version=-custom-kernel kernel_image kernel_headers

Строка —append-to-version позволяет добавить свою нумерацию или название к версии ядра, которое будет выводиться командой uname. Здесь можно вписать любую строку, но она обязательно должна начинаться с тире.

В Debian, Ubuntu и некоторых других дистрибутивах принят формат пакета с расширением deb, который содержит, как правило, скомпилированную программу и позволяет легко ее установить, удалить или обновить.

Через некоторое время в каталоге /usr/src появятся два deb пакета. Пакет с именем linux-image-2.6.23.deb будет содержать скомпилированное ядро, а linux-headers-2.6.23.deb – заголовочные файлы, которые могут понадобиться при самостоятельной компилляции некоторых других приложений или модулей. Цифра в вашем случае будет скорее всего другая. Устанавливаются они при помощи dpkg. В нашем примере команда будет выглядеть так.

$ sudo dpkg -i linux-image-2.6.23.deb linux-headers-2.6.23.deb

Еще одно удобство такого способа. Такое ядро теперь можно быстро и без проблем установить на другие компьютеры при условии, что при конфигурации было учтено все возможное оборудование. Если посмотреть сейчас в файл /boot/grub/menu.lst, то можно обнаружить в списке новое ядро. Еще один плюс, не нужно возиться с настройкой загрузчика. Linux forever!

 

13 Комментариев к Компиляция ядра — Ubuntu way

Аватар

vlas

Февраль 17th, 2008 | 13:28

«Теперь установим все необходимые для сборки пакеты.»
Я бы еще дописал make и gcc

«Строка –append-to-version позволяет добавить свою нумерацию или название к версии ядра, которое будет выводиться командой uname.»
Совершенно не обязательно добавлять append-to-version, достаточно лишь в конфиге ядра в
General setup указать свою версию в «Local version — append to kernel release», а также включить в ядро параметр «Automatically append version information to the version string»

Я всегда собираю ядро командой make-kpkg —roocmd=fakeroot kernel_image
В принципе, если есть полное дерево сырцов ядра, то хедеры не нужны.

Аватар

vlas

Февраль 17th, 2008 | 13:32

—rootcmd*

Аватар

grinder

Февраль 17th, 2008 | 13:43

В Ubuntu make, gcc и прочее ставится просто:
$ sudo apt-get install build-essential

Аватар

RemDerBauer

Февраль 17th, 2008 | 13:52

боян, давным давно была эта статья на английском, ещё в том году

Аватар

grinder

Февраль 17th, 2008 | 14:10

А ничего сверх секретного здесь и не написано, что делаю то и пишу. Книги для чайников тоже эту инфу содержат, но их читают и радуются.

Аватар

vlas

Февраль 17th, 2008 | 14:42

«В Ubuntu make, gcc и прочее ставится просто:»
просто, не просто, а в статье не описано.

Аватар

grinder

Февраль 17th, 2008 | 14:46

2vlas Спасибо, подправил.

Аватар

StasikOS

Февраль 28th, 2008 | 6:07

apt-get install build-essential их как раз и ставит.
apt-cache show build-essential | grep depends :
Depends: libc6-dev | libc-dev, gcc (>= 4:4.1.1), g++ (>= 4:4.1.1), make, dpkg-dev (>= 1.13.5)

Аватар

links for 2008-02-28 « dMitry Alexandrov

Февраль 28th, 2008 | 8:52

[...] Компиляция ядра — Ubuntu way (tags: ubuntu howto) Posted by mitry Filed in blog [...]

Аватар

vitek

Апрель 21st, 2008 | 1:57

в ubuntu 7.10:
также надо чтобы версия совпадала с параметром Debian revision number в фаеле /etc/kernel-pkg.conf
если он не установлен, то поумолчанию — debian = $(version)-10.00.Custom
сооветсвенно, если не совпадает, то весь процесс останавливается.

Аватар

alexy

Август 14th, 2008 | 20:42

спасибо за подробную справку о настройках

Аватар

Linuxoid - все что знаю о Туксе » Архив блога » Спящий режим для пингвина

Сентябрь 13th, 2008 | 20:31

[...] вариант не приемлем, ядро придется собрать самостоятельно. Берем с http://www.kernel.org/ необходимое ядро, с сайта swasup2 [...]

Аватар

Hariec

Август 5th, 2010 | 15:30

Да статья неплохая, вот только это шапка айсберга. Куда более интересно и полезно было бы как раз про настройку ядра и его компонентов. Вот это в сети постов нет, а если и есть то про старые ядра.

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

Наверх