Описание загрузчика NMS-SM-RK3568-U-Boot

Назначение

NMS-SM-RK3568-U-Boot — это программный компонент, предназначенный для подготовки аппаратной платформы и загрузки основной операционной системы.

Запускается после включения питания или сброса аппаратной платформ, в его задачи входят:

Инициализация аппаратуры

Настраивает контроллеры памяти (DRAM, SRAM, Flash);

Конфигурирует тактирование (PLL, clock tree);

Инициализирует UART, SPI, I²C, GPIO, сетевые интерфейсы;

Подготавливает устройства хранения (eMMC, SD, SATA SSD и т.п.).

Загрузка операционной системы

Находит и загружает ядро ОС и корневую файловую систему;

Передаёт ядру параметры (адреса памяти, командную строку, DTB);

Запускает ядро на выполнение.

Поддержка различных источников загрузки

Может загружать ОС из Flash, SD-карты, eMMC, USB, сети (TFTP/NFS) и т.д.;

Позволяет выбрать порядок загрузки (boot sequence).

Интерактивная оболочка (CLI)

Через консоль UART можно выполнять команды вручную;

Настраивать переменные окружения (например, bootcmd, bootargs);

Отлаживать систему на ранних стадиях запуска.

Обновление и отладка

Позволяет обновлять прошивку по сети или с USB;

Используется для диагностики оборудования на ранних этапах

U-boot-2024

Прямая ссылка на Git с системой сборки: https://github.com/inmys/buildroot-external-inmys/tree/nms-sm-rk3568

U-boot для RK3568 можно собрать из mainline репозитория с помощью Buildroot по инструкции для ядра 6.1

U-boot может загружаться либо с SD, либо с eMMC. Приоритет bootrom на EMMC. Приоритет нашего u-boot на SD.

Релиз доступен по ссылке: https://disk.yandex.ru/d/hmKqKdvUE5smig

Релиз собран с поддержкой:

ethernet (X7,X8 - cmd: «ping»)

usb (X11 cmd: «usb start»)

sata (m.2 на нижней части платы: X9: cmd: «scsi scan»)

pci (X33-pcie3, X19-pcie2: cmd: «pci enum;pci»)

sdcard(X5 : cmd: «mmc dev 1;mmc info»)

saveenv(сохраняет переменные окружения в eMMC)

Прошивать на SDcard или eMMC так:

dd if=u-boot-rockchip.bin of=/dev/XXX seek=64

U-boot переходит к загрузке ОС командой

bootflow scan

Команда ожидает extlinux.conf файл носителях, которые определены в переменной окружения:

boot_targets=mmc1 mmc0 nvme scsi usb pxe dhcp spi

mmc1 - SD на плате SM-EVM

mmc0 - eMMC на модуле SMARC

scsi - SATA M2 диск на плате SM-EVM

Таким образом, если нужно переопределить порядок загрузки, небходимо изменить порядок носителей в переменной окружения boot_targets.

Например, чтобы загружать Linux с SATA:

setenv boot_targets "scsi mmc1 mmc0 nvme usb pxe dhcp spi"
saveenv

Файл extlinux.conf

Пример конфигурационного файла для загрузки Buildroot-сборки:

TIMEOUT 3
DEFAULT main
#MENU TITLE Boot menu
label main
kernel /Image
fdt /rk3568-inmys-smarc-evm.dtb
initrd /rootfs.cpio.gz
append earlycon=uart8250,mmio32,0xfe660000 console=ttyS2,1500000