10.3.1. Установка ядра
Сборка ядра состоит из нескольких этапов—настройка, компиляция и
установка. Ознакомьтесь с файлом README
в дереве исходных тектов, чтобы узнать об
альтернативных способах настройки ядра.
Подготовьте пакет к компиляции, выполнив следующую команду:
make mrproper
Выполнение этой команды гарантирует, что дерево исходников будет
абсолютно чистым. Разработчики ядра рекомендуют запускать эту
команду перед каждой компиляцией. Не следует полагаться на то, что
дерево исходных текстов ядра будет чистым после распаковки.
Существует несколько способов настройки параметров ядра. Обычно это
делается с помощью псевдографического интерфейса, например так:
make menuconfig
Значения необязательных переменных окружения
make:
-
LANG=<переменная_LANG_хоста>
LC_ALL=
-
Устанавливает значение локали на то, которое используется на
хосте. Это может понадобиться для правильного отображения
интерфейса menuconfig с помощью ncurses в текстовой консоли
Linux с UTF-8.
Если это необходимо, обязательно замените значение <переменной_LANG>
на
значение переменной $LANG
вашего
хоста. В качестве альтернативы вы можете использовать
значения переменных $LC_ALL
или
$LC_CTYPE
.
-
make
menuconfig
-
Эта команда запускаеи интерфейс на основе ncurses. Для
использования других (графических) интерфейсов, выполните
make help.
Для получения общей информации о настройке параметров ядра,
смотрите
https://mirror.linuxfromscratch.ru/hints/downloads/files/kernel-configuration.txt.
Книга BLFS содержит некоторую информацию о требованиях к
конфигурации ядра для поддержки пакетов, которые отсутствуют в LFS.
Эта информация доступна по ссылке
https://mirror.linuxfromscratch.ru/blfs/view/stable-systemd/longindex.html#kernel-config-index.
Дополнительную информацию о настройке и сборке ядра можно найти по
адресу http://www.kroah.com/lkn/.
Примечание
Хорошей отправной точкой для настройки ядра, может стать запуск
команды make
defconfig. В результате её выполнения будет
создана базовая конфигурация с учётом архитектуры системы.
Обязательно включите/отключите/настройте следующие параметры,
иначе система может работаеть некорректно или вообще не
загружаться:
General setup -->
[ ] Compile the kernel with warnings as errors [CONFIG_WERROR]
[ ] Auditing Support [CONFIG_AUDIT]
CPU/Task time and stats accounting --->
[*] Pressure stall information tracking [CONFIG_PSI]
< > Enable kernel headers through /sys/kernel/kheaders.tar.xz [CONFIG_IKHEADERS]
[*] Control Group support [CONFIG_CGROUPS] --->
[*] Memory controller [CONFIG_MEMCG]
[ ] Enable deprecated sysfs features to support old userspace tools [CONFIG_SYSFS_DEPRECATED]
[*] Configure standard kernel features (expert users) [CONFIG_EXPERT] --->
[*] open by fhandle syscalls [CONFIG_FHANDLE]
General architecture-dependent options --->
[*] Enable seccomp to safely compute untrusted bytecode [CONFIG_SECCOMP]
Networking support --->
Networking options --->
<*> The IPv6 protocol [CONFIG_IPV6]
Device Drivers --->
Generic Driver Options --->
[ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
[*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
[*] Automount devtmpfs at /dev, after the kernel mounted the rootfs [CONFIG_DEVTMPFS_MOUNT]
Firmware Loader --->
[ ] Enable the firmware sysfs fallback mechanism [CONFIG_FW_LOADER_USER_HELPER]
Firmware Drivers --->
[*] Export DMI identification via sysfs to userspace [CONFIG_DMIID]
Graphics support --->
Frame buffer Devices --->
<*> Support for frame buffer devices --->
File systems --->
[*] Inotify support for userspace [CONFIG_INOTIFY_USER]
Pseudo filesystems --->
[*] Tmpfs POSIX Access Control Lists [CONFIG_TMPFS_POSIX_ACL]
Включите некоторые дополнительные параметры, если вы создаете
64-битную систему. Если вы используете menuconfig, включите их в
следующем порядке: сначала CONFIG_PCI_MSI
, затем CONFIG_IRQ_REMAP
, и, наконец,
CONFIG_X86_X2APIC
, это
связано с тем что каждый следующий вариант появляется после
включения зависимостей.
Processor type and features --->
[*] Support x2apic [CONFIG_X86_X2APIC]
Memory Management options --->
[ ] Enable userfaultfd() system call [CONFIG_USERFAULTFD]
Device Drivers --->
[*] PCI Support ---> [CONFIG_PCI]
[*] Message Signaled Interrupts (MSI and MSI-X) [CONFIG_PCI_MSI]
[*] IOMMU Hardware Support ---> [CONFIG_IOMMU_SUPPORT]
[*] Support for Interrupt Remapping [CONFIG_IRQ_REMAP]
Примечание
Хотя "Протокол IPv6" не является строго обязательным, он
настоятельно рекомендуется разработчиками systemd.
Примечание
Если ваша хост поддерживает UEFI и вы хотите загрузить LFS с
помощью него, вам необходимо настроить некоторые параметры ядра,
следуя инструкции
на странице BLFS.
Пояснения для выбранных выше параметров ядра:
-
Compile the
kernel with warnings as errors
-
Включение этого параметра может привести к сбою сборки, если
компилятор и/или конфигурация отличается от конфигурации ядра
разработчиков.
-
Enable kernel
headers through /sys/kernel/kheaders.tar.xz
-
Для сборки ядра с этим параметром необходим пакет
cpio.
cpio не
устанавливается в LFS.
-
Support for
uevent helper
-
Включение этого параметра может вызвать сбои при управление
устройствами через Udev/Eudev.
-
Maintain a
devtmpfs
-
С помощью этого параметра узлы устройств создаются
автоматически и заполняются самим ядром, даже без запуска
Udev. Udev будет работать поверх, управляя разрешениями и
добавляя необходимые символические ссылки. Этот элемент
конфигурации необходим всем пользователям Udev/Eudev.
-
Automount
devtmpfs at /dev
-
Этот параметр позволит смонтировать представление ядра
устройств в /dev при переключении на корневую файловую
систему непосредственно перед запуском init.
-
Support
x2apic
-
Поддержка запуска 64-разрядного контроллера прерываний для
x86 процессоров в режиме x2APIC. x2APIC может быть включен в
BIOS на системах x86 и у ядра собранного без этой опции будет
kernel panic при загрузке. Эта опция не окажет никакого
эффекта, но и не причиняет вреда, если x2APIC отключен в
BIOS.
-
Enable
userfaultfd() system call
-
Если этот параметр включен, уязвимость в системе безопасности
ядра Linux-5.19.2 не исправлена, и доступна для эксплуатации.
Отключите эту опцию, чтобы предотвратить эксплуатацию
уязвимости. Этот системный вызов не используется ни одной
частью LFS или BLFS.
В качестве альтернативы, в некоторых ситуациях может быть уместно
использование команды make
oldconfig. Смотрите файл README
для получения дополнительной информации.
По желанию, вы можете пропустить настройку ядра, скопировав
конфигурационный файл ядра .config
,
из хост системы(если он доступен) в каталог куда было распаковано
ядро linux-5.19.2
. Однако, мы не
рекомендуем этот вариант. Намного лучше изучить все параметры меню
и создать конфигурацию ядра с нуля.
Скомпилируйте образ ядра и модули:
make
При использовании модулей, могут потребоваться файлы конфигурации,
которые расположены в каталоге /etc/modprobe.d
. Информация о модулях и
конфигурации ядра находится в Раздел 9.3,
«Взаимодействие с устройствами и модулями» и в документации к
ядру linux-5.19.2/Documentation
.
Кроме этого, стоит ознакомиться с руководством modprobe.d(5)
.
Если поддержка модулей не была отключена в параметрах ядра,
установите модули с помощью:
make modules_install
После окончания компиляции, необходимо выполнить еще несколько
шагов для завершения установки ядра. Некоторые файлы должны быть
скопированы в каталог /boot
.
Внимание
Если хост система содержит отдельный раздел для каталога /boot,
файлы скопированные ниже, должны находится в нём. Самый простой
способ это сделать - выполнить монтирование каталога /boot хост
системы (вне chroot) к каталогу /mnt/lfs/boot перед тем, как
продолжить. Из-под пользователя root
в хост
системе выполните команду:
mount --bind /boot /mnt/lfs/boot
Путь к образу ядра может различаться в зависимости от используемой
платформы. Имя файла, может быть произвольным, но начинаться должно
с vmlinuz для обеспечения
совместимости с автоматической настройкой процесса загрузки,
описанного в следующем разделе. Следующая команда предполагает
архитектуру x86:
cp -iv arch/x86/boot/bzImage /boot/vmlinuz-5.19.2-lfs-11.2-systemd
System.map
- это символьный файл для
ядра. Он содержит точки входа каждой функции в API ядра, а также
адреса структур данных для запущенного ядро. Он используется в
качестве ресурса при исследовании проблем с ядром. Выполните
следующую команду для установки файла:
cp -iv System.map /boot/System.map-5.19.2
Файл конфигурации ядра .config
создается на шаге make
menuconfig и содержит все параметры ядра, которое
было скомпилировано только что. Рекомендуется сохранить этот файл
на будущее:
cp -iv .config /boot/config-5.19.2
Установите документацию ядра:
install -d /usr/share/doc/linux-5.19.2
cp -r Documentation/* /usr/share/doc/linux-5.19.2
Важно отметить, что файлы в каталоге исходных кодов ядра не
принадлежат пользователю root. Всякий раз, когда пакет
распаковывается от пользователя root (как это и выполнялось внутри среды
chroot), файлы имеют те идентификаторы пользователя и группы,
которые были присвоены при распаковке. Обычно это не вызывает
проблем для других устанавливаемых пакетов, так как каталог с
исходными кодами удаляется после установки пакета. Однако исходный
код ядра Linux часто сохраняется в течение длительного времени.
Из-за этого существует вероятность того, что идентификатор
пользователя, используемый при распаковке, будет назначен другому
пользователю. В таком случае, этот пользователь будет иметь доступ
на запись в этот каталог.
Примечание
В ряде случаев требуется обновить конфигурацию ядра для пакетов,
которые будут установлены позже в BLFS. В отличии от других
пакетов, нет необходимости удалять дерево исходного кода ядра
после установки только что собранного ядра.
Если вы планируете оставить каталог с исходным кодом ядра,
выполните команду chown -R
0:0 в каталоге linux-5.19.2
, чтобы все файлы принадлежали
пользователю root.
Предупреждение
В некоторой документации по ядру рекомендуется создать
символическую ссылку /usr/src/linux
указывающую на каталог с исходниками ядра. Эта рекомендация
относится к ядрам до версии 2.6 и не
должна выполняться в системе LFS, так как это может
вызвать проблемы с пакетами, которые вы, возможно, захотите
собрать, когда ваша базовая система LFS будет готова.
Предупреждение
Заголовочные файлы в системном каталоге include
(/usr/include
) всегда используются те, которые
применялись при компиляции Glibc, то есть подготовленные
заголовочные файлы, установленные в Раздел 5.4,
«Заголовочные файлы Linux-5.19.2 API». Поэтому их
никогда не следует
заменять на чистые заголовочные файлы ядра или любые другие
подготовленные заголовочные файлы.