Создание ядра из src.rpm в fedora7

Cent OS, Scientific Linux

Модератор: Модераторы разделов

Аватара пользователя
Ali1
Сообщения: 2250

Создание ядра из src.rpm в fedora7

Сообщение Ali1 »

Свободный перевод с примечаниями Building a Kernel from the src RPM
Оригинальная статья находится на CustomKernel (последним исправлял(а) RubenKerkhof (http://fedoraproject.org/wiki/RubenKerkhof)2007-06-04 19:36:13)


Создание ядра из src.rpm

Этот документ содержит инструкции для опытных пользователей, которые хотят пересобрать ядро. Опытные пользователи создают пользовательские ядра, по целому ряду причин :

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

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

*
rpmdevtools
Прим Полезный набор инструментов для сборки rpm-пакетов. В том числе, позволяет собирать пакеты пользователю без дополнительных настроек.

*
yum-utils

Для установки этих пакетов используйте следующую команду :

Код: Выделить всё

 su -c 'yum install yum-utils rpmdevtools'

Прим можно скачать отдельно и установить.


Шаг 1 : Получение исходных текстов
!!!Важно!!!
Не собирайте пакеты, как root. Создание пакетов root`ом по своей сути является опасным и не требуется, даже для ядра. Следующие инструкции позволяют обычному пользователю установить и построить ядра из исходных текстов.

1. Подготовка среды построения пакетов RPM в своем домашнем каталоге. Выполните следующую команду :

Код: Выделить всё

     rpmdev-setuptree

Прим gpg ключи должны быть сгенерированы, иначе gpg --gen-key или отключите

Код: Выделить всё

# Whether or not to gpg sign modules
%define with_modsign 0

в kernel-2.6.spec см ниже

2.

Скачайте ядро kernel-<version>.src.rpm file. <version>. src.rpm. Включите source репозитории с помощью --enablerepo.

Код: Выделить всё

   yumdownloader --source kernel

Прим можно скачать отдельно я делал именно так так как yum выдал ошибку
3.

Установите необходиме зависимости для исходников ядра:

Код: Выделить всё

  yum-builddep kernel-<version>.src.rpm


Прим можно скачать отдельно

4.

Установите kernel-<version>.src.rpm с помощью следующей команды:

Код: Выделить всё

   rpm -Uvh kernel-<version>.src.rpm


Эта команда записывает содержимое RPM в ${HOME}/rpmbuild/SOURSES и ${HOME}/rpmbuild/SPECS, где $ {HOME} ваш домашний каталог. Можно смело игнорировать все сообщения, аналогичный приведенному ниже :

Код: Выделить всё


    warning: user brewbuilder does not exist - using root
    warning: group brewbuilder does not exist - using root


!!!!Важно
Требуемое пространство. Процесс полного построения ядра требует нескольких гигабайт дополнительное место на файловой системы, содержащий домашний каталог.
Прим у меня он использовал так-же /var/tmp. 3,1G rpmbuild/

1. Подготовьте ядро, используя следующие команды :

Код: Выделить всё


       cd ~/rpmbuild/SPECS
       rpmbuild -bp --target=`uname -m` kernel-2.6.spec

Исходные коды ядра расположены в каталоге ~/rpmbuild/BUILD/kernel-<version>/linux- <version>.<arch>


Шаг 2 : Скопируйте исходные коды и создайте обновление

Копия исходного кода, чтобы сохранить подлинное дерево и внесения изменений в копии :

Код: Выделить всё


 cp -rv ~/rpmbuild/redhat/BUILD/kernel-2.6.x ~/rpmbuild/redhat/kernel-2.6.x.orig
cp -alv ~/rpmbuild/redhat/kernel-2.6.x.orig ~/rpmbuild/redhat/kernel-2.6.x.new

!!!Важно
Вторая комана cp создаст жесткую ссылку .orig и .new,что позволит diff работать быстрее. Большинство текстовых редакторов знают, как разорвать жесткую ссылку правильно, чтобы избежать проблем.

Вносите изменений непосредственно в дерево .new исходного кода, или скопировать в модифицированный файл. Этот файл может исходить от разработчика, который просил испытания, из новейшего ядра, или другое. После модификации .new исходного кода можно создавать патч. Для создания патча запустите diff в отношении всего дерева .new:

*

Код: Выделить всё


   cd ~/rpmbuild/redhat/BUILD
diff -uNrp kernel-2.6.orig kernel-2.6.new > ../SOURCES/kernel-2.6-my-new-patch.patch


! Дополнительная информация на man-страницах для diff(1) и patch(1).

Прим Мне кажется, тут ошибка каталог /rpmbuild/redhat/ -не существует.

Шаг 3 : Настройка параметров ядра

1. Перейдите в каталог исходных кодов ядра:

Код: Выделить всё

  cd ~/rpmbuild/BUILD/kernel-<version>/linux-<version>.<arch>/

2.

Выберите нужный файл конфигурации из ~/rpmbuild/BUILD/kernel-<version>/linux- <version>.<arch>/configs . Скопируйте желаемый конфигурационный файл в ~/rpmbuild/BUILD/kernel-<version>/linux- <version>.<arch>/.config :

Код: Выделить всё

      cp configs/<desired-config-file> .config


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

Код: Выделить всё

    make oldconfig


4. Выполните следующую команду, выбора и сохранения желаемых опций ядра :

Код: Выделить всё

    make menuconfig


Прим Проверяем .config. Он должен начинаться со строки
# i386
Если нет - добавьте ее в самое начало файла. Без этой строки ядро не соберется.


5.

Скопируйте файл конфигурации в ~/rpmbuild/SOURCES/ :

Код: Выделить всё

  cp .config ~/rpmbuild/SOURCES/kernel-<version>-<arch>.config



Шаг 4 : Подготовка spec

1.

Добавте уникальную строку версии spec файле. Это позволит не путать Ваше ядро с дистрибутивным ядром.Найдите строку, которая выглядит примерно так:

Код: Выделить всё

       %define release %(R="$Revision: 1.2997 $"; RR="${R##: }"; echo ${RR%%?})%{?dist}


2.

Добавте уникального идентификатора перед %{?dist} тегом. Соответствующий идентификатор начинается с "." и позволяет четко различать Ваше ядро и официальное Fedora ядро:
3.

Ваше имя или инициалы, например .Sfw и .Swilliams
4.

Название системы и даты, такие, как .Gandalf20070409
5.

.test , .test001 , или .test20070409.

Код: Выделить всё

    %define release %(R="$Revision: 1.2997 $"; RR="${R##: }"; echo ${RR%%?}).test%{?dist}%


6.

Перейдите в каталог ~/rpmbuild/redhat/SPECS :

Код: Выделить всё

    cd ~/rpmbuild/redhat/SPECS


7.

Добавте патч в kernel-<version>.spec, желательно в конец списка всех существующих патчей и четко прокомментируте.

Код: Выделить всё


    Patch20002: xen-grant-security.patch
        Patch20015: xen-oprofile-on-intel-core.patch

        # END OF PATCH DEFINITIONS
        # This is my test patch. I should describe it here
         Patch30005: kernel-2.6-my-new-patch.patch
        ...
          %patch20002 -p1
        %patch20015 -p1
        # This is my test patch. I should describe here too
        %patch30005 -p1


* Две строки были добавлены. В первой объявлен файл

. Patch30005: kernel-2.6-my-new-patch.patch

* Во второй макрос:
%patch30005 -p1

Шаг 5 : Построение нового ядра

Выполните rpmbuild для создания нового ядра:

Код: Выделить всё

 rpmbuild -ba --target=`uname -m` kernel-2.6.spec


Пакеты с новыми ядрами будут построены в каталоге ~/rpmbuild/redhat/RPMS .
Прим во время генерации ключа (на экране +++++++) желательно что-нибудь делать - шевелить мышь, переключать рабочие столы и т.п.

Для совместимости

Многие учебные пособия, примеры, и учебники по разработке ядра предпологают, что исходные тексты ядраустановлены в /usr/src/linux/ . Если вы сделаете символическую ссылку, как показано ниже, Вы сможете использовать эти учебные материалы с Fedora пакетами. Установите соответствующий пакет ядра, как это показано выше, а затем выполните следующие команды :

Код: Выделить всё

     su -c 'ln -s  /usr/src/kernels/<version>.<release>-<ar ch> /usr/src/linux'


Введите пароль суперпользователя при запросе.



Шаг 6 : Установка нового ядра

Для установки нового ядра, используте rpm -ivh , не -U , --upgrade :

Код: Выделить всё

 rpm -ivh  ~/rpmbuild/redhat/RPMS/i686/kernel-<vers ion>.<arch>rpm



Сборка только модулей ядра

Не нужно скачивать и пересобрать ядро, чтобы построить модуль. Для создания модуля текущего исполняемого ядра достаточно пакета kernel-devel. Выполните следующую команду для установки kernel-devel,используя yum.

Код: Выделить всё

 su -c 'yum install kernel-devel


Например, чтобы собрать модуль foo.ko, создайте следующий Makefile в каталоге, содержащем файл foo.c :

Код: Выделить всё


    obj-m := foo.o

    KDIR  := /lib/modules/$(shell uname -r)/build
    PWD   := $(shell pwd)

    default:
            $(MAKE) -C $(KDIR) M=$(PWD) modules

Затем выполнить make, чтобы собрать модуль foo.ko.
Прим перед $(MAKE) табуляция

Прим rpmbuild по умолчанию собирает все возможные варианты пакетов для данной архитектуры, как правило все они не нужны и можно собрать только
нужные исправив spec файл.
Мне не удалось понять правильный синтаксис .rpmmacros для изменения флагов оптимизации . Буду признателен за информацию об этом.
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Создание ядра из src.rpm в fedora7

Сообщение Liksys »

Зачет. Прикрепляю ;)
Спасибо сказали:
Аватара пользователя
esvaf
Бывший модератор
Сообщения: 844
Статус: экс- LinuxForum.Ru team
ОС: CentOS 5.3

Re: Создание ядра из src.rpm в fedora7

Сообщение esvaf »

Только очень уж много ошибок орфографических ;)
ядера
Скачате
Добавте
Заметте
текщего
даной
провило
исправир
ортимизации

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

kernel-2.6 моей новой patch.patch

Оно Вам надо? Мне кажется, тут ошибка каталог /rpmbuild/redhat/ -не существует.
Спасибо сказали:
Аватара пользователя
cyberklin
Сообщения: 215
ОС: Fedora Core 5

Re: Создание ядра из src.rpm в fedora7

Сообщение cyberklin »

хороший ман.
только открепите тогда про ядро в fc6. а то столько тем прилепленных, что устаёшь колесо крутить :)
Suum cuique
Спасибо сказали:
Аватара пользователя
esvaf
Бывший модератор
Сообщения: 844
Статус: экс- LinuxForum.Ru team
ОС: CentOS 5.3

Re: Создание ядра из src.rpm в fedora7

Сообщение esvaf »

Скоро. Пусть еще повесит немного - пока шестерка окончательно актуальность не потеряла.
Спасибо сказали:
aliens
Сообщения: 495
Статус: нетрушный
ОС: Gentoo & CentOS 5.1

Re: Создание ядра из src.rpm в fedora7

Сообщение aliens »

мда..места точно надо много.... 1.8 гб не хватает (
Придется обойтись без датчиков...
Спасибо сказали: