8.3. Linux-3.8.1

Пакет Linux содержит ядро Linux.

Приблизительное время сборки: 1.0 - 5.0 SBU
Требует свободного места на диске: 540 - 800 MB

8.3.1. Установка ядра

Сборка ядра состоит из нескольких шагов—конфигурирования, компиляции и установки. Обратитесь к файлу README, который находится в дереве исходников ядра, если Вас интересуют альтернативные методы конфигурирования ядра, не описываемые в этой книге.

Подготовим ядро к компиляции следующей командой:

make mrproper

Эта команда очищает дерево исходных кодов ядра от возможно присутствующих в нем временных файлов. Команда разработчиков ядра рекомендует выполнять это действие перед каждой компиляцией. Не стоит полагаться на то, что дерево исходников будет чисто после распаковки архива - это не всегда так.

Конфигурирование ядра будет выполняться при помощи псевдографического интерфейса. Основная информация о конфигурации ядра изложена здесь: http://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt. Также в книге BLFS есть некоторые сведения о требованиях пакетов, не входящих в LFS, к опциям ядра - http://www.linuxfromscratch.org/blfs/view/svn/longindex.html#kernel-config-index.

[Замечание]

Замечание

В связи с последними изменениями в udev, не забудьте включить следующую опцию:

Device Drivers  --->
  Generic Driver Options  --->
     Maintain a devtmpfs filesystem to mount at /dev
make LANG=<host_LANG_value> LC_ALL= menuconfig

Значения параметров make:

LANG=<host_LANG_value> LC_ALL=

Устанавливает ту же локаль для использования, что и на хост-системе. Это необходимо для правильного отображения линий интерфейса ncurses в menuconfig для локалей, основанных на UTF-8.

Не забудьте заменить <host_LANG_value> значением переменной $LANG из окружения Вашей хост-системы. Если эта переменная не установлена, вместо нее можно использовать значение переменной $LC_ALL or $LC_CTYPE.

В некоторых ситуациях make oldconfig может быть более подходящим вариантом. Обратитесь к файлу README за более поробными разъяснениями.

Вы можете пропустить конфигурирование ядра, скопировав файл настройки .config (если, конечно, он у Вас имеется) из хост-системы в директорию исходников linux-3.8.1. Однако, мы не рекомендуем этот вариант. Гораздо лучше вручную пройтись по всем настройкам ядра и создать конфигурацию с нуля.

Скомпилируем ядро и модули:

make

Если Вы используете модули ядра, возможно, Вам понадобится дополнительно настроить их в /etc/modprobe.d. Информацию о настройке модулей и самого ядра Вы можете подчерпнуть из Раздел 7.4, «Device and Module Handling on an LFS System» и документации ядра в директории linux-3.8.1/Documentation. Также, возможно, Вас заинтересует страница modprobe.conf(5).

Установим модули, если конфигурация ядра подразумевает их использование:

make modules_install

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

Путь к образу ядра на разных платформах может сильно отличаться. Вы можете свободно изменить имя файла, используемое ниже, но оно обязательно должно начинаться со слова vmlinuz, чтобы не возникло проблем с автоматической назтройкой загрузчика в следующей секции. Следующая команда предполагает, что Вы используете архитектуру x86:

cp -v arch/x86/boot/bzImage /boot/vmlinuz-3.8.1-lfs-7.3

Файл System.map содержит карту символов ядра. В нем указаны точки входа для всех функций API и адреса структур данных для запущенного ядра. Он полезен при исследовании возникающих в системе неполадок. Выполните команду ниже для установки map-файла:

cp -v System.map /boot/System.map-3.8.1

Файл настроек .config, созданный выше на шаге make menuconfig, содержит значения всех опций конфигурации для только что собранного ядра. Неплохой идеей будет сохранить его на будущее:

cp -v .config /boot/config-3.8.1

Установим документацию для ядра Linux:

install -d /usr/share/doc/linux-3.8.1
cp -r Documentation/* /usr/share/doc/linux-3.8.1

Важно помнить, что файлы в директории исходных кодов ядра не принадлежат пользователю root. Даже если архив был распакован из-под пользователя root (как мы и сделали в chroot-окружении), файлы будут иметь те же идентификаторы пользователя и группы, что и на компьютере того, кто упаковывал этот архив. Для любого другого пакета это не является проблемой, поскольку дерево исходников удаляется сразу после установки. Но, как правило, исходные коды ядра Linux остаются в системе надолго. Поэтому существует вероятность, что UID, который имеют файлы ядра, будет присвоен какому-либо пользователю на машине. Этот пользователь будет иметь доступ на запись в исходные файлы ядра.

Если Вы собираетесь оставить дерево исходников ядра, выполните команду chown -R 0:0 над директорией linux-3.8.1, чтобы быть уверенным, что все файлы доступны только пользователю root.

[Внимание]

Внимание

В некоторых разделах документации ядра Вы можете наткнуться на рекомендацию создать символическую ссылку /usr/src/linux, указывающую на каталог с исходниками ядра. Совет относится к ядрам до 2.6, и эта ссылка не должна присутствовать в системе LFS, поскольку из-за нее могут возникнуть проблемы со сборкой некоторых пакетов, которые, возможно, понадобятся Вам по окончании сборки LFS.

[Внимание]

Внимание

Файлы в системной директории include должны всегда быть именно теми подготовленными заголовочными файлами из архива ядра Linux, которые использовались при сборке Glibc. Ни в коем случае нельзя заменять их "сырыми" заголовочными файлами или заголовочными файлами другой версии ядра!

8.3.2. Настройка очередности загрузки модулей Linux

Чаще всего модули Linux загружаются автоматически, но порой необходимо внести коррективы в этот процесс. Программа, загружающая модули, modprobe или insmod, может использовать для этого файл /etc/modprobe.d/usb.conf. Этот файл необходим, если USB драйверы (ehci_hcd, ohci_hcd и uhci_hcd) были собраны в виде модулей, чтобы обеспечить их загрузку в правильном порядке. Модуль ehci_hcd должен быть загружен перед ohci_hcd и uhci_hcd во избежание появления предупреждения при загрузке системы.

Создадим новый файл /etc/modprobe.d/usb.conf следующими командами:

install -v -m755 -d /etc/modprobe.d
cat > /etc/modprobe.d/usb.conf << "EOF"
# Начало /etc/modprobe.d/usb.conf

install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true

# Конец /etc/modprobe.d/usb.conf
EOF

8.3.3. Содержимое пакета Linux

Установленные файлы: config-3.8.1, vmlinux-3.8.1-lfs-7.3-3.8.1 и System.map-3.8.1
Установленные каталоги: /lib/modules, /usr/share/doc/linux-3.8.1

Краткое описание

config-3.8.1

Содержит всю конфигурацию ядра

vmlinux-3.8.1-lfs-7.3

Ядро системы Linux. Оно является самой первой частью операционной системы, загружаемой в оперативную память после включения компьютера. Ядро определяет и настраивает все компоненты аппаратного обеспечения компьютера, а затем делает их доступными для программ в виде дерева файлов, превращая процессор в многозадачную машину, способную выполнять множество программ "одновременно" с точки зрения пользователя

System.map-3.8.1

Список адресов и символов; из него можно узнать точки входа и адреса всех функций и структур данных ядра.