4.2. Выбор ядра

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

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

4.2.1. Каталог /kernels на CD-ROM со Slackware

Предварительно откомпилированные ядра Slackware доступны в каталоге /kernels на компакт-диске со Slackware или на FTP-сайте в главном каталоге Slackware. Доступные ядра изменяются по мере выхода новых релизов, поэтому документация в этом каталоге всегда является самым достоверным источником информации. В каталоге /kernels присутствуют отдельные подкаталоги для каждого из ядер. Названия подкаталогов соответствуют названиям соответствующих загрузочных дисков. Во всех подкаталогах вы найдёте следующие файлы:

Файл Назначение
System.map Файл карты системы для этого ядра
bzImage Собственно, образ ядра
config Конфигурационный файл для исходных текстов этого ядра

Чтобы использовать ядро, скопируйте файлы System.map и config в каталог /boot, а ядро скопируйте в /boot/vmlinuz. Запустите /sbin/lilo(8), чтобы установить LILO для нового ядра, а затем перезагрузите свою систему. Вот и всё. Новое ядро установлено.

Ядра, имена которых заканчиваются на .i, обладают поддержкой IDE. Т.е. они не поддерживают SCSI, как это реализовано в базовом ядре. Ядра, имена которых заканчиваются на .s, обладают поддержкой SCSI. Они также поддерживают IDE, как и в .i-ядрах.

4.2.2. Компиляция ядра из исходных текстов

Новички часто задают вопрос: “Следует ли мне собрать новое ядро для своей системы?” Ответ звучит довольно чётко. Существует несколько случаев, когда вам нужно собрать специальное ядро для своей системы. Большинство пользователей могут использовать предварительно откомпилированные ядра в сочетании с загружаемыми модулями для получения полностью работающей системы. Вам понадобится скомпилировать ядро для своей системы, если вы обновляетесь до ядра, версия которого на данный момент отсутствует в Slackware, или если вы пропатчили исходный код ядра, чтобы добиться поддержки особого оборудования, которая отсутствует в оригинальных исходных текстах ядра. Любой пользователь двухпроцессорной системы наверняка захочет собрать ядро с поддержкой SMP. Также многие пользователи найдут работу самостоятельно собранного ядра на своей машине более быстрой. Кроме того вы можете найти полезным собрать ядро с оптимизацией по свою модель процессора.

Самостоятельная сборка ядра не настолько уж и сложна. Первым этапом является проверка того, установлены ли в вашей системе исходные тексты ядра. Убедитесь, что во время установки системы вы установили пакеты из категории K. Также необходимо убедиться, что вы установили пакеты из категории D, в особенности компилятор C, GNU make и GNU binutils. Вообще неплохо было бы полностью установить всю категорию D, если вы планируете заниматься какого-либо вида разработкой. Вы также можете загрузить последнюю версию исходного кода ядра с сервера http://www.kernel.org/mirrors.

4.2.2.1. Компиляция ядра Linux версии 2.4.x

% su -
Password:
# cd /usr/src/linux

Первым делом нужно привести исходный код в его базовое состояние. Для этого воспользуемся следующей командой (обратите внимание, что вам может понадобится сделать резервную копию файла .config, поскольку эта команда без предупреждения удалит его):

# make mrproper

Теперь вы можете сконфигурировать ядро для своей системы. Для текущей версии ядра для этого предлагаются три варианта. Первым является простая система вопросов и ответов в текстовом режиме. В ней вам задаётся целая серия вопросов, а затем создаётся конфигурационный файл. Проблема этого способа заключается в том, что, если вы где-то ошиблись, вам придётся начать всё заново. Наиболее предпочитаемым способом для большинства пользователей является система с использованием меню. И в завершение, есть ещё графическая утилита для конфигурации ядра. Выберите любой понравившийся вам способ и выполните соответствующую команду:

# make config           (текстовая версия “вопрос-ответ”)
# make menuconfig       (с использованием меню; текстовая версия)
# make xconfig          (графическая версия; убедитесь сначала, что вы работаете в X'ах)

Рисунок 4-1. Меню конфигурирования ядра

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

# make dep
# make clean

Следующим этапом является компиляция ядра. Сначала попробуйте выполнить команду bzImage, представленную ниже.

# make bzImage

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

# make modules

Теперь мы можем установить скомпилированные ядро и модули. Чтобы установить ядро в системе Slackware, необходимо выполнить следующие команды:

# mv /boot/vmlinuz /boot/vmlinuz.old
# cat arch/i386/boot/bzImage > /vmlinuz
# mv /boot/System.map /boot/System.map.old
# cp System.map /boot/System.map
# make modules_install

Вам потребуется отредактировать /etc/lilo.conf и добавить раздел для загрузки своего старого ядра на тот случай, если новое не заработает. После этого выполните /sbin/lilo, чтобы установить новую загрузочную запись. Теперь вы можете выполнить перезагрузку и загрузить своё новое ядро.

4.2.2.2. Ядро Linux версии 2.6.x

Компиляция ядра версии 2.6 лишь немногим отличается от сборки ядер версии 2.4 или 2.2, однако важно, чтобы вы поняли разницу, перед тем погружаться в этот процесс. Больше нет необходимости выполнять make dep и make clean. Также процесс компиляции ядра серии 2.6 не настолько подробен. Следствием этого является то, что процесс сборки стал более понятным, однако имеются некоторые небольшие добавки. Если у вас возникают проблемы со сборкой ядра, настоятельно рекомендуется снова включить подробный режим. Для этого просто добавьте V=1 в команду компиляции. Это позволит вам получить более подробный отчёт, который может помочь разработчику ядра или другому опытному пользователю при решении разного рода проблем.

# make bzImage V=1

4.2.3. Использование модулей ядра

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

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

Модули в системе находятся в каталоге /lib/modules/версия_ядра. Они могут быть загружены во время загрузки системы посредством файла rc.modules. Этот файл содержит довольно хорошие комментарии и примеры для основных компонентов аппаратного обеспечения. Чтобы увидеть список активных на данный момент модулей, используйте команду lsmod(1):

# lsmod
Module                  Size  Used by
parport_pc              7220   0
parport                 7844   0  [parport_pc]

Здесь видно, что загружен только модуль параллельного порта. Чтобы выгрузить модуль, используйте команду rmmod(1). Модули могут быть загружены с помощью команды modprobe(1) или insmod(1). Как правило команда modprobe более безопасна, потому что она загружает все модули, от которых зависит модуль, который вы пытаетесь загрузить.

Многим пользователям вовсе не обязательно загружать или выгружать модули вручную. Они могут использовать автоматический загрузчик модулей ядра для управления ими. По умолчанию в Slackware во все ядра встроен kmod. kmod - это функция ядра, которая позволяет ему загружать модули по мере их запроса. Дополнительную информацию о самом kmod и о том, как он настраивается, смотрите в /usr/src/linux/Documentation/kmod.txt. Для этого вам нужно установить пакет с исходными кодами или загрузить сами исходные тексты с http://kernel.org.

Дополнительную информацию можно найти на страницах руководства по любой из этих команд, плюс в файле rc.modules.