Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
На главную -> MyLDP -> Тематический каталог -> Обновление и конфигурирование ядра

Как скомпилировать ядро для Ubuntu Lucid

Оригинал: ""How to compile a Ubuntu Lucid kernel
Автор: Peter
Дата публикации: May 5, 2010
Перевод: Н.Ромоданов
Дата перевода: июнь 2010 г.

Ubuntu Lucid был выпущен в апреле, и я, когда писал статьи на тему "Как скомпилировать ядро Ubuntu ..." для нескольких релизов, не указал исключения для Ubuntu Lucid.

Разработчики ядра Ubuntu еще раз решили внести изменения в ядро Ubuntu Lucid. Описанная в этой статье последовательность действий не такая, как для предыдущих релизов Ubuntu.

Но достаточно разговоров, давайте начнем компиляцию нашего собственного ядра для Ubuntu Lucid.

Введение

Система контроля версий git

Я буду использовать git для того, чтобы получить последнюю версию ядра. Это мой любимый способ получения исходных кодов и, на мой взгляд, это самый быстрый способ затем внести изменения, когда вы захотите обновить свое собственное ядро до последней версии.

Я предлагаю добавить мой репозитарий Launchpad в вашу систему, если в ней в настоящее время еще нет версии Lucid. В репозитарии содержится последняя версия git и она обычно обновляется в течение дня после выпуска нового релиза git, выполните инструкции, приведенные в статье "Пакеты git для Ubuntu", с тем, чтобы добавить мой репозитарий. Также есть пакеты git, предназначенные для Lucid.

Архитектура

Я компилирую для версии i386 , если вы хотите откомпилировать для версии amd64, вам везде в этой статье нужно поменять i386 на amd64.

Вариант

Я выбрал имя core2 в качестве имени моей персональной версии, поскольку я буду создавать ядро для процессора Core2. Кроме того, когда буду указывать в конфигурации тип процессора, я укажу поддержку 64 ГБ, поскольку мой ноутбук имеет 4 Гб памяти, что является главной причиной того, что я стал компилировать свое собственное ядра. Я сделал еще несколько других изменений, но они выходят за рамки данной статьи.

Подготовка

Давайте начнем с подготовки нашей машины для компиляции ядра Ubuntu Lucid. Откроем терминал:

sudo su -
apt-get install fakeroot build-essential
apt-get install crash kexec-tools makedumpfile kernel-wedge
apt-get build-dep linux
apt-get install git-core libncurses5 libncurses5-dev
apt-get install libelf-dev asciidoc binutils-dev

Создайте директорий, где вы будете собирать свое ядро, в поддиректории этого директория будет находится исходный код ядра и все файлы deb в конце концов окажутся в этом директории. Я выбрал /d1/development/kernel/lucid.

Получение исходного кода

cd /d1/development/kernel/lucid
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-lucid.git  source

Исходный код будет помещен в директорий исходного кода.

Мы создадим ветку, в которой мы будет делать все наши изменения. Таким образом, основная ветка останется неизменной, что сильно облегчит нашу работу, когда мы захотим обновить наше собственное ядро Ubuntu Lucid до следующей новой версии.

Выбираем последнюю версию:

cd source
less debian.master/changelog

Нажмем q для того, чтобы вернуться в режим командной строки.

Результат должен быть похож на следующий:

linux (2.6.32-21.31) lucid; urgency=low

Иногда вы увидите, что первый раздел помечен как UNRELEASED (не реализовано), в этом случае последней версией будет первая версия, идущая за разделом с пометкой UNRELEASED.

В нашем случае последней версией является 2.6.32-21.31.

Вы можете выбрать любую версию, которую найдете в changelog, но согласно замыслу нашей статьи выбирайте последнюю версию.

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

git checkout Ubuntu-2.6.32-31.31 -b core2

Мы создадим ветку, которая будет называться core2.

Создание новой конфигурации

Я буду использовать метод, позволяющий создать вариант новой версии, это слегка добавит работы, но вы всегда можете компилировать исходные ядра.

В качестве базового для нашего собственного варианта, которым будет core2, мы будем использовать вариант generic.

cp debian.master/config/i386/config.flavour.generic debian.master/config/i386/config.flavour.core2
fakeroot debian/rules clean
debian/rules updateconfigs

Чтобы внести изменения в конфигурационный файл нам нужно его отредактировать. Разработчики ядра создали скрипт для редактирования ядра, который вызывается с помощью команды debian/rules makefile, к сожалению, вам придется просмотреть все варианты конфигураций прежде, чем начнете использовать этот скрипт.

debian/rules editconfigs

Скрипт будет показывать конфигурации, в которых нужно выполнить редактирование. Вы не должны делать какие-либо изменения в конфигурациях до тех пор, пока вы не увидите конфигурацию core2.

 * Run menuconfig on i386/config.flavour.core2... Press a key.

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

Когда вы все сделаете, сделайте резервную копию конфигурационного файла:

cp debian.master/config/i386/config.flavour.core2 ../.

Теперь для того, чтобы подготовиться к компиляции, вам необходимо очистить дерево git.

git reset --hard
git clean -xdf

Подготавливаем все для компиляции

Потому что мы переходим к созданию нового варианта на основе уже существующего (generic - в моем случае), нам нужно создать несколько дополнительных файлов. Во время компиляции процесс проверит некоторые настройки предыдущих релизов, а поскольку мы создаем версию, для которой нет исходных кодов, мы должны их создать. Предыдущий релизом в нашем случае является 2.6.32-20.30

ls debian.master/abi
cp debian.master/abi/2.6.32-20.30/i386/generic debian.master/abi/2.6.32-20.30/i386/core2
cp debian.master/abi/2.6.32-20.30/i386/generic.modules debian.master/abi/2.6.32-20.30/i386/core2.modules

Скопируем нашу конфигурацию обратно

cp ../config.flavour.core2 debian.master/config/i386/

Нам нужно отредактировать некоторые файлы:

Файл: debian.master/etc/getabis

Находим строку:

getall i386 generic generic-pae 386

Заменяем ее на строку:

getall i386 generic generic-pae 386 core2

Файл: debian.master/rules.d/i386.mk

Находим строку:

flavours        = generic generic-pae 386

Заменяем ее на строку:

flavours        = generic generic-pae 386 core2

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

cp debian.master/control.d/vars.generic debian.master/control.d/vars.core2

Мы можем отредактировать файл и сделать из него свой собственный файл:

arch="i386 amd64"
supported="Core2"
target="Geared toward Core2 desktop systems."
desc="x86/x86_64"
bootloader="grub-pc | grub | lilo (>= 19.1)"
provides="kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9"

Нам нужно подтвердить в репозитарии git наши изменения

git add .
git commit -a -m "Core2 modifications"

Текст, который указан после –m, является сообщением, которое вы добавляете к своему подтверждению.

Компиляция

Пришло время выполнить компиляцию, но прежде, чем мы начнем компиляции, есть еще действие, которое нужно сделать. Я не поместил его в раздел "Подготовка", поскольку вам нужно выполнять это действие независимо от того, изменяли ли вы конфигурацию или нет:

fakeroot debian/rules clean

Все пакеты будут созданы в директории /d1/development/kernel/lucid.

Создайте независимые пакеты:

skipabi=true skipmodule=true fakeroot debian/rules binary-indep

С помощью указанной выше инструкции будут созданы следующие файлы deb:

linux-source-2.6.32_2.6.32-21.31_all.deb'.
linux-doc_2.6.32-21.31_all.deb
linux-tools-common_2.6.32-21.31_all.deb
linux-headers-2.6.32-21_2.6.32-21.31_all.deb

Создайте следующие инструментальные пакеты:

skipabi=true skipmodule=true fakeroot debian/rules binary-perarch

С помощью указанной выше инструкции будут созданы следующие файлы deb:

linux-source-2.6.32_2.6.32-21.31_all.deb'.
linux-tools-2.6.32-21_2.6.32-21.31_i386.deb

Создайте файлы зависимостей для нашей версии:

skipabi=true skipmodule=true fakeroot debian/rules binary-core2

С помощью указанной выше инструкции будут созданы следующие файлы deb:

linux-headers-2.6.32-21-core2_2.6.32-21.31_i386.deb
linux-image-2.6.32-21-core2_2.6.32-21.31_i386.deb

Устанавливаем новое ядро

После того, как компиляция будет закончена, у нас в родительском директории будут все указанные выше пакеты.

Для того, чтобы установить файлы

cd ..
sudo dpkg -i linux-headers-2.6.32-21-core2_2.6.32-21.31_i386.deb linux-headers-2.6.32-21_2.6.32-21.31_all.deb linux-image-2.6.32-21-core2_2.6.32-21.31_i386.deb

Проверьте ваш главный загрузчик: отмечено ли в нем только что установленное ядро как используемое по умолчанию, для загрузчика grub проверьте файл /boot/grub/menu.lst, а для загрузчика grub2 проверьте /boot/grub/grub.cfg.

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



Средняя оценка 5 при 1 голосовавших

Комментарии