RSS
 

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

26 Мар

Прежде чем приступить, попробуем вначале ответить на вопрос: А зачем собственно нужна пересборка ядра? Большинство современных пользователей 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!

 
  1. Dima

    27.03.2011 at 6:01 пп

    Оличная статья!

     
  2. Dima

    27.03.2011 at 6:01 пп

    отличная статья!

     
  3. avto

    05.04.2011 at 3:18 пп

    This is goog information for me. Author — respect!

     
  4. avto

    19.04.2011 at 5:34 пп

    Thanks, it’s usefully