Building a custom kernel/ru

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

Причины
Обычно пользователи пересобирают ядро по нескольким причинам: Также эти инструкции могут быт применены для простой генерации дерева исходных кодов ядра.
 * для тестирования патчей
 * для переконфигурации существующего ядра
 * для изучения ядра и его разработки

Предварительные действия
Перед началом убедитесь, что в системе установлены все необходимые пакеты, включая следующие:
 * rpmdevtools
 * yum-utils

Чтобы установить эти пакеты, воспользуйтесь командой: $ su -c 'yum install yum-utils rpmdevtools'

Получение исходных кодов
1. Подготовьте окружение для создания пакетов в вашем домашнем каталоге, используя команду: $ rpmdev-setuptree

Эта команда создаёт дерево каталогов  и. Где  — ваш домашний каталог.

2. Загрузите файл. Для этого может потребоваться включение репозитория исходников параметром $ yumdownloader --source kernel

3. Установите зависимости исходников для сборки ядра командой (команда выполняется с привилегиями root): $ su -c 'yum-builddep kernel- .src.rpm'

4. Установите  командой: $ rpm -Uvh kernel- .src.rpm

Эта команда запишет содержимое rpm-пакета в  и , где   это ваш домашний каталог. Можно игнорировать все сообщения похожие на эти: warning: user kojibuilder does not exist - using root warning: group kojibuilder does not exist - using root

Подготовка дерева исходных кодов ядра
На этом шаге распакуем все файлы с исходниками ядра. Это нужно для просмотра, редактирования кода или создания патча.

1. Подготовьте дерево исходников используя следующие команды: $ cd ~/rpmbuild/SPECS $ rpmbuild -bp --target=`uname -m` kernel.spec

Теперь исходники находятся в каталоге, где   это ваш домашний каталог.

Копирование исходников и создание патча
Скопируйте дерево исходников для сохранения оригинала при внесении изменений: $ cp -r ~/rpmbuild/BUILD/kernel-2.6. /linux-2.6. . ~/rpmbuild/BUILD/kernel-2.6. .orig $ cp -al ~/rpmbuild/BUILD/kernel-2.6. .orig ~/rpmbuild/BUILD/kernel-2.6. .new

Изменения можно вносить прямо в код в дереве  или копируя изменённые файлы. Такие файлы могут быть от разработчиков, которым нужно тестирование, из основной ветки ядра (ванилла), или из любого другого источника.

После модификации ветки, создаём патч. Для этого запускаем снова команду  над полными   и   деревьями следующей командой: $ cd ~/rpmbuild/BUILD $ diff -uNrp kernel-2.6. .orig kernel-2.6. .new > ../SOURCES/linux-2.6-my-new-patch.patch

Замените  на желаемое имя для нового патча.

Конфигурирование опций ядра
1. Переходим в каталог с исходным кодом ядра: $ cd ~/rpmbuild/BUILD/kernel-2.6. /linux-2.6. . /

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

2. Выберите желаемый файл конфигурации из  Скопируйте его в  : $ cp configs/<желаемый-файл-конфигурации> .config

3. Выполните следующую команду: $ make oldconfig

4. Затем выполните команду для выбора и сохранения требуемых опций в консольном (псевдографическом) режиме: $ make menuconfig

При этом должны быть установлены пакеты  и. Для их установки выполните: $ su -c 'yum install ncurses ncurses-devel'

Или в графическом режиме: $ make xconfig

5. Проверьте наличие в самом начале конфигурационного файла строки, содержащей название платформы, для которой создаётся ядро (вывод команды ). В начале этой строки должен стоять знак #. Например, для архитектуры x86_64 должно быть:
 * 1) x86_64

6. Скопируйте файл конфига в : $ cp .config ~/rpmbuild/SOURCES/config- -generic

Подготовка файлов сборки
На данном шаге вносим необходимые изменения в файл. Данный шаг необходим для сборки собственного ядра.

1. Переходим в каталог : $ cd ~/rpmbuild/SPECS

2. Открываем файл  для редактирования.

3. Даём ядру уникальное имя. Важно убедиться, что имя вашего ядра отличается от имён релизных (исходных и будущих) ядер. Добавьте уникальную строку в название ядра, отредактировав строку. Измените  на ваши инициалы, дату или любое другое уникальное значение.

Отредактируйте эту строку:
 * 1) % define buildid .local

К такому виду: %define buildid .

4. Если вы создали патч, то добавьте его в файл, желательно в конец всех существующих патчей и прокомментируйте его: Patch2220: linux-2.6-cputime-fix-accounting.patch Patch9999: linux-2.6-samfw-test.patch
 * 1) cputime accounting is broken, revert to 2.6.22 version

Затем надо добавить команду применения патча в -файл. Снова, добавьте в конец файла и прокомментируйте: ApplyPatch linux-2.6-cputime-fix-accounting.patch ApplyPatch linux-2.6-samfw-test.patch

Сборка нового ядра
На этом шаге создаются RPM-файлы ядра. Данный шаг необходим для сборки собственного ядра.

Используйте утилиту  для сборки нового ядра: Для создания всех возможных файлов: $ rpmbuild -bb --target=`uname -m` kernel.spec Для исключения специфичных файлов из сборки (для более быстрой сборки): $ rpmbuild -bb --without --target=`uname -m` kernel.spec

Возможные значения для. Указание  уберёт некоторый отладочный код из ядра, а указание   отменит создание пакетов.

Для сборки только конкретного ядра: $ rpmbuild -bb --with --target=`uname -m` kernel.spec

Возможные значения для. Например, для сборки пакетов  и   команда выглядит так: $ rpmbuild -bb --with baseonly --without debuginfo --target=`uname -m` kernel.spec Для сборки с включёнными файлами : $ rpmbuild -bb --with baseonly --with firmware --without debuginfo --target=`uname -m` kernel.spec

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

Совместимость со стандартными руководствами
Многие руководства и примеры по разработке ядра подразумевают, что исходники ядра установлены в. Чтобы эти руководства работали установите исходники как сказано выше и создайте символическую ссылку: $ su -c 'ln -s /usr/src/kernels/. - /usr/src/linux'

Для этой операции нужен пароль.

Установка нового ядра
На данном шаге устанавливаем новое ядро в систему. Для этого потребуются права.

Для установки нового ядра используйте команду, т.е. без опции  или  : $ cd ~/rpmbuild/RPMS/ / $ su -c 'rpm -ivh kernel-. .rpm'

Если вместо установки появится ошибка, что более новый пакет уже установлен, то добавьте опцию. Если вы правильно изменили имя вашего ядра, то ваши  и   не будут соответствовать. Простейшее решение — это собрать новые, как указано выше в "Сборка нового ядра", а затем выполнить следующее: $ cd ~/rpmbuild/RPMS/ / $ su -c 'rpm -ivh kernel-. .rpm kernel-firmware-. .rpm kernel-headers-. .rpm kernel-devel-. .rpm'