Сборка образа

Внимание

Это заготовка страницы. Здесь приведены общие инструкции, тестирование которых не производилось. Окончательная версия страницы войдёт во вторую версию руководства LFA.

Всё готово для сборки img-образа, который в будущем будет пригоден для записи на SD-карту или eMMC-накопитель.

Создание базовых файлов

Сначала создадим заголовок размером 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 Мб, но вы можете установить и свой.

Создайте файловую систему на этом разделе:

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-1.0.img

Сжатие образа

При необходимости вы можете сжать образ с помощью xz или любого другого архиватора, который вам больше нравится. Я часто видел img-образы, сжатые с помощью xz, поэтому использую его:

xz lfa-1.0.img

Запись образа на SD-карту

Теперь вы можете записать полученный образ на SD-карту. Для этого можете использовать dd:

sudo dd if=lfa-1.0.img of=/dev/sdX

где X - буква (a, b, c, etc.) устройства, на которое будет производиться запись образа, например, /dev/sdc. Обратите внимание на то, что в некоторых случаях вместо sdX имя устройства может быть и mmcblkX.

Также для записи можете использовать программу Balena Etcher.


Смотрите также: