Библиотека сайта rus-linux.net
Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
Как скомпилировать ядро для 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.
Перезагрузитесь и пользуйтесь новым, только что установленным ядром.