NVMe

Загрузка barebox с SD/eMMC и rootfs на NVMe

Целевая схема

SD/eMMC: barebox NVMe: rootfs /boot/Image.gz /boot/rk3568-diasom-som-evb.dtb

1. Собрать barebox

Использовать коммит c92c769736 и новее в котором добавлена поддержка загрузки rootfs с nvme

git clone https://github.com/MacroGroup/barebox.git cd barebox git checkout devel git pull export CROSS_COMPILE=aarch64-linux-gnumake ARCH=arm64 diasom_rk35xx_defconfig make ARCH=arm64

После сборки должен появиться новый образ barebox, например:

images/barebox-rk3568-diasom-som-evb.img

2. Подготовить NVMe в Linux

Для записи rootfs нужно загрузиться в Linux-систему, где доступен /dev/nvme0n1. Это может быть временная загрузка с SD, eMMC или сервисного rootfs. Проверить наличие NVMe:

lsblk # ожидается nvme0n1

Очистить старые сигнатуры файловых систем и таблицы разделов:

wipefs -a /dev/nvme0n1

Создать GPT-таблицу разделов и один раздел под rootfs через fdisk:

fdisk /dev/nvme0n1

Внутри fdisk выполнить команды:

g # создать новую GPT-таблицу разделов n # создать новый раздел 1 # номер раздела Enter # первый сектор по умолчанию Enter # последний сектор по умолчанию, то есть до конца NVMe w # записать изменения

Проверить результат:

lsblk /dev/nvme0n1 # ожидается nvme0n1 └─nvme0n1p1

3. Записать rootfs на NVMe

Запись rootfs с host

В данном варианте вам необходимо:

Свободный слот или переходник для подкелчения NVMe к ПК Артефакты сборки образа diasom(инструкция get_started_rk3568.pdf)

Как указано в инструкции по сборке образа diasom, после сборки в каталоге images будет представлен rootfs.ext4 его и необходимо записывать раздел NVMe:

sudo dd if=images/rootfs.ext4 of=/dev/nvme0n1p1 bs=4M conv=fsync sync

3.2 Запись rootfs с временной загрузки с SD, eMMC или сервисного rootfs

Загрузиться в Linux-систему

Если необходимо, выполнить пункт 2, для подготовки nvme

dd if=/dev/mmcblkXp3 of=/dev/nvme0n1p1 bs=4M conv=fsync # Где X номер устройства, соответсвующий выбранному варианту загрузки(eMMC или SD)

4. Проверить загрузку в barebox

Перезагрузиться в barebox с SD или eMMC.

Проверить NVMe:

ls /mnt ls /mnt/nvme0n1.0/boot #ожидается Image.gz rk3568-diasom-som-evb-lvds.dtbo rk3568-diasom-som-smarc-evb-pciex2.dtbo

5. Запись barebox на носитель

Важно - все действия по записи выполнены из каталога barebox и на HOST.

Очистить eMMC или SD

Запись barebox на SD:

sudo dd if=images/barebox-diasom-rk3568-som-evb.img of=/dev/sdX bs=1024 seek=32 && sync sync
/dev/sdX — устройство SD-карты целиком /dev/sdX1 — раздел, его указывать нельзя

Запись barebox на eMMC:

# С использованием rkdevtool(Для установки воспользуйтесь инструкцией # load_image_to_emmc.pdf) sudo rkdeveloptool db rk356x_spl_loader_ddr1056_v1.10.111.bin sudo rkdeveloptool wl 0x40 images/barebox-diasom-rk3568-som-evb.img sync

6. Проверить загрузку

Запустить плату

Ожидаемый лог:

Booting entry 'default' Booting from NVMe Loading ARM aarch64 Linux image '/mnt/nvme0n1.0/boot/Image.gz'

Важно - выбор rootfs в barebox, построена следующим образом: eMMC → SD → NVME Это значит, что при наличии rootfs на eMMC и SD, rootfs будет использоваться именно с этих носителей.