downloadDownload FAQFAQ
Site Navigation:
 
 

8. Ядро Linux

В этом разделе освещаются изменения и важная информация о ядре на основе 2.6.18 в составе Fedora Core 6. Ядро 2.6.18 включает:

  • Поддержка облегченного наследования приоритета в пространстве пользователя (http://lwn.net/Articles/178253/)

  • Средство отладки "lock validator" (http://lwn.net/Articles/185666/)

  • Новая политика снижения энергопотребления для многоядерных систем SMPnice (http://lwn.net/Articles/186438/)

  • Значительно улучшенный уровень SATA (http://lwn.net/Articles/183734/)

  • Миграция страниц без подкачки (http://lwn.net/Articles/160201/)

  • Счетчики VM по зонам

  • Учет задержек по задачам

  • Новый механизм контроля доступа по пакетам для SELinux - secmark (http://james-morris.livejournal.com/11010.html)

  • Рандомизированный i386 vDSO

  • Новые драйвера и поддержка дополнительного оборудования множеством существующих драйверов

  • Множество исправлений ошибок и других малозаметных улучшений

8.1. Версия

Fedora Core может включать дополнительные патчи с улучшениями, исправлениями ошибок или дополнительными функциями. По этой причине ядро Fedora Core может не совпадать строка-в-строку с так называемым vanilla kernel с web-сайта kernel.org:

http://www.kernel.org/

Чтобы получить список патчей необходимо получить RPM пакет с исходным кодом и выполните для него следующую команду:

rpm -qpl kernel-<версия>.src.rpm

8.2. Список изменений

Для того чтобы получить журнал изменений в пакете выполните следующую команду:

rpm -q --changelog kernel-<версия>

Удобную версию списка изменений вы можете получить по ссылке http://wiki.kernelnewbies.org/LinuxChanges. Краткий и полный список различий между ядрами доступен на http://kernel.org/git. Версия ядра Fedora базируется на дереве Линуса.

Изменения и настройки в версии для Fedora вы найдете на http://cvs.fedora.redhat.com .

8.3. Разновидности ядра

Fedora Core 6 включает следующие варианты ядер:

  • Обыкновенное ядро, для применения на большинстве систем. Подготовленный исходный код находится в пакете kernel-devel-<версия>.<арх>.rpm.

  • kernel-PAE, для применения на 32-разрядных x86 системах с > 4GB ОЗУ или для процессоров с поддержкой функции 'NX (No eXecute)' . Это ядро поддерживает как одно- так и многопроцессорные системы.

  • Виртуальное ядро для применения с пакетом эмуляции Xen. Подготовленнй исходный код находится в пакете kernel-xen-devel-<версия>.<арх>.rpm

  • Kdump ядро для применения совместно с функциями kexec/kdump. Подготовленный исходный код находится в пакете kernel-kdump-devel-<версия>.<арх>.rpm.

Вы можете установить заголовки ядра для всех типов ядра одновременно. Файлы будут установлены в каталог /usr/src/kernels/<версия>-[xen|kdump]-<арх>/. Для этого используйте команду:

su -c 'yum install kernel-{PAE,xen,kdump}-devel'

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

[Замечание]Ядро по умолчанию содержит поддержку SMP

Отдельного SMP ядра не предлагается в Fedora Core 6 для архитектур i386, x86_64 и ppc64 . Многопроцессорная поддержка включена в обыкновенное ядро.

[Замечание]Поддержка ядра для PowerPC

Для архитектуры PowerPC в Fedora Core 6 нет поддержки Xen и kdump. 32-разрядные PowerPC все еще сопровождаются выделенным SMP ядром.

8.4. Сообщения об ошибках

Обратитесь к http://kernel.org/pub/linux/docs/lkml/reporting-bugs.html за информацией о том как сообщать об ошибках в ядре Linux. Вы также можете воспользоваться http://bugzilla.redhat.com для сообщения об ошибках, специфичных для Fedora.

8.5. Следование текстовым документам

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

su -c 'ln -s /usr/src/kernels/<версия>.<выпуск>-<архитектура> /usr/src/linux'

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

8.6. Подготовка к разработке ядра

Fedora Core 6 не влючает пакет kernel-source, который поставлялся в предыдущих версиях, т.к. теперь для сборки внешних модулей требуется только пакет kernel-devel. Дополнительно поставляется подготовленный и настроенный исходный код. Данный вопрос рассматривается в этом разделе.

[Замечание]Эти инструкции относятся к текущему ядру

Для упрощения указаний мы будет предполагать, что вы хотите настроить исходный код ядра, совпадающий с работающим в данный момент. Ниже мы полагаем, что фраза <версия> относится к версии ядра, отображаемой командой uname -r.

Если вам требуется получить доступ к оригинальным исходным кодам ядра Fedora Core - вы найдете их в пакете kernel .src.rpm. Для создания развернутого дерева исходных кодов на основе этого файла, выполните следующие шаги:

[Замечание]Не выполняйте сборку пакетов от имени суперпользователя (root)

Сборка пакетов под учетной записью суперпользователя в действительности является опасным и не требуется, даже для сборки ядра. Инструкции показанные ниже позволят установить ядро с использованием обычной учетной записи. Во многих источниках предполагается, что ядро расположено в /usr/src/linux. Если вы будете их использовать, просто подставьте ~/rpmbuild/BUILD/kernel-<версия>/linux-<версия>.<арх>."]]

  1. Подготовьте окружение сборки RPM пакетов в своем домашнем каталоге. Запустите следующую команду:

    su -c 'yum install rpmdevtools yum-utils' 
    rpmdev-setuptree
  2. Введите пароль пользователя root в ответ на запрос.

  3. Скачайте файл kernel-<версия>.src.rpm. Задействуйте все соответсвующие исходные репозитарии, такие как Core, Updates или Testing при помощи параметра -e:

    yumdownloader -e core-source -e updates-source --source kernel
  4. Введите пароль пользователя root в ответ на запрос.

  5. Установите пакет kernel-<версия>.src.rpm using the command: командой:

    rpm -Uvh kernel-<версия>.src.rpm
  6. Эта команда запишет содержимое RPM в ${HOME}/rpmbuild/SOURCES и ${HOME}/rpmbuild/SPECS, где ${HOME} — это ваш домашний каталог.

    [Замечание]Требуемое пространство на жёстком диске

    Полный процесс сборки ядра может потребовать несколько дополнительных гигабайт дискового пространства на файловой системе, содержащей ваш домашний каталог.

  7. Подготовьте исходный код ядра следующими командами:

    cd ~/rpmbuild/SPECS 
    rpmbuild -bp --target $(uname -m) kernel-2.6.spec
  8. Дерево исходных кодов распологается в каталоге ~/rpmbuild/BUILD/kernel-<версия>/linux-<версия>.<арх>.

    Настройки для вариантов ядер поставляемых с Fedora Core 6 расположены в каталоге ~/rpmbuild/BUILD/kernel-<версия>/linux-<версия>.<арх>/configs. Например, конфигурационнй файл для i686 SMP варианта называется ~/rpmbuild/BUILD/kernel-<версия>/linux-<версия>.<арх>/configs/kernel-<версия>-i686.config. Следующая команда поместит желаемый конфигурационный файл в правильное место для выполнения сборки:

    cp configs/<требуемый-config-файл> .config
  9. Каждое ядро получает свое имя, на основе собственно версии ядра. Это значение выводит команда uname -r. Имя ядра задается при помощи первых четырех строк файла Makefile. Файл Makefile изменен для создания ядра с другим именем, отличным от работающего ядра. Для того, чтобы ядро могло работать с модулем, он должен быть собран с ядром имеющим корректное имя. Для этого вам потребуется исправить Makefile ядра.

    Например, если uname -r выводит строку 2.6.17-1.2345_FC6, измените определение EXTRAVERSION с:

    EXTRAVERSION = -prep 

    на

    EXTRAVERSION = -1.2345_FC6

    Замените все что находится после дефиса и до конца.

  10. Введите следующую команду:

    make oldconfig

    Далее вы можете продолжать как обычно.

[Замечание]Построение двоичных RPM пакетов ядра

Обычно, ядра для Fedora собираются при помощи утилиты rpmbuild и файла spec. Результат сборки может измениться, если вы используете встроенную цель сборки для ядра make rpm.

8.7. Построение только модулей ядра

Развернутое дерево исходных кодов не требуется для сборки модулей ядра, таких как вас собственный драйвер устройства, для используемого в данный момент ядра. Вам потребуется только пакет kernel-devel для сборки внешних модулей. Если вы выбрали его в процессе установки, сделайте это при помощи Pirut, вызвав его из меню ПриложенияДобавить/Удалить программы, или используйте для установки yum. Выполните следующую команду для установки пакета 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.