Сборка образа
Это заготовка страницы. Здесь приведены общие инструкции, тестирование которых не производилось. Окончательная версия страницы войдёт во вторую версию руководства LFA.
Всё готово для сборки img
-образа, который в будущем будет пригоден для записи на SD-карту или eMMC-накопитель.
Общий процесс
В общем случае вам нужно собрать три образа:
- Заголовок, в который будет записан загрузчик U-Boot;
- Системный раздел, куда будет скопирована собранная система;
- Общий образ, объединяющий заголовочный и системный разделы вместе.
Общий образ повторяет структуру разделов, которая в итоге будет получена после записи этого образа на SD- или иной накопитель, с которого будет производиться загрузка. Однако важно отметить, что это не единственный верный путь для создания готового образа системы — как минимум из-за того, что загрузчик системы может располагаться не просто на другом разделе, он может быть расположен на другом накопителе вообще (некоторые материнские платы оснащены SPI NOR Flash небольшого объёма, которого достаточно для установки туда U-Boot или иной микропрограммы). Конкретный алгоритм действий по созданию готового образа системы, ровно как и его структура и принципы его создания, являются сугубо индивидуальными и подбираются в зависимости от оборудования и задач сборщика. Ниже представлены общие инструкции для большинства материнских плат по типу Raspberry Pi, Orange Pi и подобных.
Создание базовых файлов
Сначала создадим заголовок размером 2 Мб:
dd if=/dev/zero bs=1M count=2 of=bootloader.img
И копируем сохранённый образ U-Boot по смещению 128:
dd if=$LFA/bootloader.bin \
conv=notrunc seek=128 \
of=bootloader.img
Вне зависимости от SoC (Allwinner, Broadcom или Rockchip), для которого вы собирали U-Boot, он был сохранён в файл $LFA/bootloader.bin
. Так что имя файла в аргументе dd if=...
правильное.
Теперь нужно создать образ, в котором будут содержаться файлы собранной системы:
dd if=/dev/zero bs=1M count=512 of=rootfs.img
Здесь размер образа составляет 512 Мб. В зависимости от требований и объёма собранной системы установите вместо 512
своё значение.
Создайте файловую систему на этом разделе:
mkfs.ext4 -L BOOT \
-O ^metadata_csum -F \
-b 4096 \
-E stride=2,stripe-width=1024 \
-L rootfs rootfs.img
Копирование файлов
Смонтируйте полученный образ и скопируйте в неё файлы нашей системы (саму систему, ядро, Devicetree и сценарий загрузки):
mkdir -pv /tmp/lfa_rootfs
sudo mount -v rootfs.img /tmp/lfa_rootfs
sudo cp -rfv $LFA_SYS/* /tmp/lfa_rootfs
sync
Все действия здесь выполняются от имени пользователя lfa
. Поскольку здесь используется программа sudo
, вам нужно добавить пользователя lfa
в группу wheel
.
После копирования файлов размонтируйте образ:
sudo umount /tmp/lfa_rootfs
Создание окончательного образа
Объедините два образа в один:
dd if=rootfs.img conv=notrunc oflag=append bs=1M seek=2 of=bootloader.img
Создание таблицы разделов
Созданный нами образ нерабочий, поскольку ещё не содержит таблицу разделов. Создайте её с помощью fdisk
:
fdisk bootloader.img
o
n
p
1
4096
+512M
w
Значения новых команд:
После начала редактирования мы вводим команду
o
, чтобы создать пустую таблицу разделов MBR. Затем командойn
создаём новый раздел. Выбираем тип, номер и первый сектор. Дело в том, что размер сектора равен 512 байт, т.е. 1 Кб равен двум секторам. Размер заголовка 2 Мб, т.е. 2048 Кб или 4096 секоторов. Размер раздела можно указать в Мб. Сохранение и выход командойw
.
Переименуйте файл bootloader.img
, дав ему более логичное и подходящее имя:
mv -v bootloader.img lfa-2.0.img
Сжатие образа
При необходимости вы можете сжать образ с помощью xz
или любого другого архиватора, который вам больше нравится. Я часто видел img
-образы, сжатые с помощью xz
, поэтому использую его:
xz lfa-2.0.img
Запись образа на SD-карту
Теперь вы можете записать полученный образ на SD-карту. Для этого можете использовать dd
:
sudo dd if=lfa-2.0.img of=/dev/sdX
где X
- буква (a
, b
, c
, etc.) устройства, на которое будет производиться запись образа, например, /dev/sdc
. Обратите внимание на то, что в некоторых случаях вместо sdX
имя устройства может быть и mmcblkX
.
Также для записи можете использовать программу Balena Etcher.
Смотрите также: