linux
Ядро операционной системы.
- Версия: 6.9
- Домашняя страница: https://www.kernel.org
- Время сборки: 23 ОВС
Процесс сборки ядра состоит из нескольких процессов: конфигурирование, компиляция и установка. Прочитайте файл README
в дереве исходного кода Linux, чтобы узнать об альтернативных методах, отличных от того, как конфигурируется ядро в этом руководстве.
Подготовка
Убедитесь в том, что дерево исходного кода ядра не содержит лишних файлов:
make mrproper
Разработчики ядра рекомендуют выполнять эту команду каждый раз, когда вы собираете Linux.
Настройка
Поскольку вы создаёте встраиваемую систему, убедитесь, что все ключевые компоненты встроены в ядро, а не являются модулями (в меню, которое откроется по команде далеее опция отмечена как
<*>
, а не как<M>
). Ключевыми обычно являются опции для поддержки консоли, видео, дисков и файловых систем, а также сети. Без них система не будет функционировать должным образом. Рекомендуется конфигурировать ядро без модулей, чтобы сэкономить место на диске и упростить процесс загрузки системы.
Откройте псевдографическое меню, в котором вам нужно выбрать все опции, которые нужны вам для корректной работы ядра на компьютере, для которого вы собираете систему:
make ARCH=arm64 CROSS_COMPILE=$LFA_TGT- menuconfig
Выбор платформы
Обязательно зайдите в раздел Platform selection --->
и отметьте там поддержку необходимых для вас SoC. Например, если я собираю систему для компьютера Orange Pi 3 LTS с Allwinner SoC, то в этом списке мне нужно отметить только
Platform selection --->
[*] Allwinner sunxi 64-bit SoC Family
FUSE
FUSE (англ. filesystem in userspace — «файловая система в пользовательском пространстве») — свободный модуль для ядер Unix-подобных операционных систем, позволяющий разработчикам создавать новые типы файловых систем, доступные для монтирования пользователями без привилегий (прежде всего — виртуальных файловых систем); это достигается за счёт запуска кода файловой системы в пользовательском пространстве, в то время как модуль FUSE предоставляет связующее звено для актуальных интерфейсов ядра. C использованием средств FUSE разработаны, в частности, SSHFS, NTFS-3G, GlusterFS, ZFS.
File systems --->
<*/M> FUSE (Filesystem in Userspace) support [CONFIG_FUSE_FS]
Сборка
Скомпилируйте ядро, используя только что созданный .config
:
make ARCH=arm64 CROSS_COMPILE=$LFA_TGT-
Теперь вам необходимо скомпилировать файлы devicetree:
make ARCH=arm64 CROSS_COMPILE=$LFA_TGT- dtbs
Установка
Следующие действия нужно выполнить, если вы собирали ядро с модулями:
При использовании модулей ядра может потребоваться файл
/etc/modprobe.conf
. Информация, касающаяся модулей и конфигурации ядра, находится в документации в директорииDocumentation/
. Также будет не лишним прочитать документацию (man)modprobe.conf(5)
.make ARCH=arm64 CROSS_COMPILE=$LFA_TGT- \ INSTALL_MOD_PATH=$LFA_SYS modules_install
Установка ядра и ряда дополнительных файлов
Конфигурационный файл .config
содержит все настройки конфигурации только что собранного ядра. Было бы неплохим сохранить этот файл для дальнейшего пользования:
cp -v .config $LFA_SYS/boot/config-6.6.6
Скопируйте файл System.map
в /boot
:
cp -v System.map $LFA_SYS/boot/System.map-6.6.6
Полученное ядро будет находиться в директории arch/arm64/boot
. Возможно, что там будет находиться несколько вариантов одного и того же ядра, просто с разным сжатием или добавлением помощников загрузчика. Следуйте инструкциям вашего загрузчика по копированию ядра в конечную систему. Например:
cp -iv arch/arm64/boot/Image $LFA_SYS/boot/vmlinuz-6.6.6
Для того, чтобы не указывать в опциях ядра полное имя vmlinuz-6.6.6
создайте символическую ссылку:
ln -svf vmlinuz-6.6.6 $LFA_SYS/boot/vmlinuz
Установка файлов Devicetree
Создайте в $LFA_SYS/boot
директорию dtb-6.6.6
:
mkdir -pv $LFA_SYS/boot/dtb-6.6.6
И установите файлы Devicetree:
make ARCH=arm64 CROSS_COMPILE=$LFA_TGT- \
INSTALL_DTBS_PATH=$LFA_SYS/boot/dtb-6.6.6 dtbs_install
Для того, чтобы не указывать в boot.cmd
, который мы скоро напишем, версию ядра, сделайте символическую ссылку:
ln -svf dtb-6.6.6 $LFA_SYS/boot/dtb
Создание ссылок на ряд периодически изменяющихся файлов сделает проще их обновление до новой версии: нужно просто установить новую версию файла ядра и директории с devicetree в $LFA_SYS/boot/
и обновить символические ссылки. Этим мы можем оставить предыдущие версии ядра и devicetree, которые могут понадобиться, если окажется, что их новые версии работают некорректно или не работают вовсе.
В $LFA_SYS/boot/dtb-6.6.6
будут установлены скомпилированные файлы devicetree только для тех плат, поддержку которых вы указали при конфигурировании ядра. В этой директории будут созданы поддиректории с именами используемых в этих платах SoC, например:
$LFA_SYS/boot/dtb-6.6.6/allwinner/
$LFA_SYS/boot/dtb-6.6.6/broadcom/
$LFA_SYS/boot/dtb-6.6.6/rockchip/
В этих поддиректориях будут содержаться файлы *.dtb
для поддерживаемых плат. Если вам что-либо отсюда не нужно, то ради экономии места и уменьшения размера собранного дистрибутива вы можете удалить лишние файлы. Однако будьте готовы, что на каких-то компьютерах ваша система может не заработать.
Содержимое пакета
- Установленные файлы:
.config-6.6.6
,vmlinuz-6.6.6
,vmlinuz
,System.map-6.6.6
,dtb-6.6.6/*
,dtb/
Описание компонентов
.config-6.6.6
— содержит параметры сборки ядра.vmlinuz-6.6.6
,vmlinuz
— скомпилированное ядро Linux.System.map-6.6.6
— список адресов и символов; в нём указаны точки входа и адреса всех функций и структур данных в ядре. Иногда полезен при отладке.dtb-6.6.6/
,dtb/
— директория с файлами devicetree.