8.3.1. Установка ядра
Сборка ядра разбита на несколько шагов — конфигурация,
компиляция и установка. Если вам не нравится способ установки, описаный
в этой книге, то посмотрите файл README
в директории с исходниками ядра на предмет альтернативы.
Подготовимся к компиляции запуском следующей команды:
make mrproper
Это позволит убедиться, что дерево исходников будет абсолютно
чистым. Команда разработки ядра рекомендует запускать эту команду перед
каждой компиляцией ядра. Вы не можете быть абсолютно уверены в
отсутствии лишних файлов даже после распаковки исходников.
Так же убедимся, что ядро не пропускает события горячих подключений
устройств в пространстве пользователя пока пространство пользователя
показывает, что оно готово:
sed -i 's@/sbin/hotplug@/bin/true@' kernel/kmod.c
Если в Разделе 7.6,
“Настройка консоли Linux”, было решено вкомпилировать
раскладку клавиатуры в ядро, используйте следующую команду:
loadkeys -m /usr/share/kbd/keymaps/[path to keymap]
> \
drivers/char/defkeymap.c
Например для использования русской клавиатуры (один из вариантов), используйте /usr/share/kbd/keymaps/i386/qwerty/ru1.map.gz
.
Отконфигурируем ядро через меню-подобный интерфейс:
make menuconfig
Альтернативно, make oldconfig
может быть более подходящим в некоторых ситуациях. Смотрите файл
README
для большей информации.
Замечание
При конфигурации ядра убедитесь, что включили опцию
“Support for hot-pluggable
devices” в меню “General Setup”. Это разрешит события
горячеих подключений, которые используются udev для заполнения директории /dev
нодами устройств.
Если хотите, можете пропустить конфигурацию ядра копированием файла
конфигурации .config
из основной системы
(если он доступен) в распакованную директорию linux-2.6.8.1
, хотя мы это не рекомендуем.
Часто лучше пройтись по всему меню конфигурации для создания файла
конфигурации ядра.
Для поддержки POSIX-разделяемой памяти убедитесь, что опция
“Virtual memory file system
support” включена. Она расположена в меню
“File systems” и обычно
включена по умолчанию.
Скрипты загрузки LFS также предполагают, что обе опции
“Support for Host-side USB”
и “USB device filesystem”
были вкомпилированы непосредственно в ядро или они не были
компилированы вообще. Скрипты загрузки не будут работаль правильно,
если эта поддержка выполнена в виде модуля (usbcore.ko).
Замечание
NPTL требует, чтобы ядро было скомпилировано с GCC 3.x, в данном
случае 3.4.1. Компиляция с GCC 2.95.x известна некоторыми ошибками при
тесте glibc, поэтому не рекомендуется компилировать ядро с gcc 2.95.x.
Скомпилируем образ ядра и модули:
make
Если вы будете использовать модули, то может понадобиться файл /etc/modprobe.conf
. Информация по модулям и конфигурации
ядра находится в документации ядра в директории linux-2.6.8.1/Documentation
. Также может быть интересна
man страница modprobe.conf.
Будьте осторожны при чтении другой документации, так как обычно она
применима только к ядрам 2.4.x. Как мы давно знаем, проблемы
конфигурации ядра, специфичные для Hotplug и Udev, не документированы.
Проблема в том, что Udev будет создавать ноды устройств только если
Hotplug или созданный пользователем скрипт вставит соответствующий
модуль в ядро и не все модули определяются Hotplug.
Заметьте, что утверждения, похожие на указанное ниже, в файле /etc/modprobe.conf
не работают с Udev:
alias char-major-XXX some-module
Поскольку планируется компиляция с поддержкой Hotplug, Udev и модулей,
мы рекомендуем начинать с полностью монолитной конфигурацией ядра,
особенно при первом использовании Udev.
Установим модули, если ядро их использует:
make modules_install
Если имеется много модулей и очень мало свободного места на диске, подумайте о
компрессии модулей. Для большинства пользователей такая компрессия не стоит
затрат времени, но если система сжимается для экономии места, смотрите
http://www.linux-mips.org/archives/linux-mips/2002-04/msg00031.html.
После завершения компиляции ядра требуются дополнительные шаги для
завершения установки. Некоторые файлы необходимо скопировать в директорию
/boot
.
Путь к образу ядра может отличаться для различных платформ.
Используйте следующую команду для установки ядра:
cp arch/i386/boot/bzImage /boot/lfskernel-2.6.8.1
System.map
это файл карты символов для ядра.
Он содержит карту точек входа в каждую функцию API ядра.
Используйте следующую команду для установки этого файла:
cp System.map /boot/System.map-2.6.8.1
Файл конфигурации ядра .config
, созданный
после выполнения команды make menuconfig,
содержит все выбранные опции конфигурации для только что откомпилированного
ядра. Хорошей идеей будет сохранение этого файла:
cp .config /boot/config-2.6.8.1
Важно отметить, что файлы в директории исходников ядра не принадлежат
пользователю root.
Хотя пакет был распакован пользователем
root (так как мы находимся в
среде chroot), файлы имеют ID пользователя и группы, соответствующие
компьютеру, на которм проводилась упаковка. Обычно это не является
проблемой для остальных пакетов поскольку дерево исходников удаляется
после установки ядра, хотя часто оно сохраняются очень долго.
В связи с этим имеется вероятность, что пользователь с таким же ID, как у
собранного пакета исходников ядра, получит права доступа на запись в директории
исходников ядра.
Если дерево исходников ядра планируется сохранить, выполните chown -R 0:0 на директории linux-2.6.8.1
для передачи всех файлов пользователю
root.
Установленные файлы: ядро, заголовки ядра и System.map
Короткое описание
-
Ядро
-
Это двигатель системы Linux. При включении компьютера ядро является
первой частью операционной системы, которая будет загружена.
Оно определяет и инициализирует все аппаратные компоненты
компьютера, после чего делает эти компоненты доступными для программ
в виде дерева файлов и включает одиночный процессор в многопроцессорной
системе.
-
Заголовки ядра
-
Описывают интерфейс к предоставляемым ядром сервисам.
Заголовки в системной директории include
должны всегда быть теми же, что использовались
для компиляции Glibc и поэтому не должны быть заменены при обновлении
ядра.
-
System.map
-
Список адресов и символов; карта точек входа и адреса каждой функции
API ядра и структур данных ядра.