U-Boot для NAPI (RK3308)
Введение
U-Boot — это загрузчик (bootloader), который запускается сразу после включения устройства, инициализирует базовое железо и загружает операционную систему (например, Linux) из памяти, сети или другого носителя.
Что делает делает U-boot
- Включился процессор
- Запустился U-Boot
- U-boot:
- проверяет железо (память, интерфейсы)
- загружает ядро Linux (с eMMC / SD / сети)
- передаёт управление Linux
Цепочка загрузки
Питание → U-Boot → Linux kernel → система
Почему U-Boot важен
Без него:
- Linux просто не стартанёт
- нечем загрузить ядро
- нечем выбрать откуда грузиться
Попасть в U-Boot prompt
Приме нимо к mainline U-Boot 2024.10 и vendor 2017.09. Различия отмечены.
Подключи USB-UART к UART0, baud 1500000 8N1. На загрузке жми быстро жми Control-C несколько раз, поа не увидишь значок "=>".

Проверка устройств
MMC (eMMC, SD)
mmc list # список контроллеров и их индексов
mmc dev 0 # переключиться на mmc0 (eMMC)
mmc dev 1 # переключиться на mmc1 (SD)
mmc info # инфо о текущем mmc
mmc part # таблица разделов на текущем mmc
USB
usb start # инициализация USB host
usb info # список USB-устройств
usb tree # дерево USB
usb storage # список USB mass storage
usb part 0 # разделы на usb device 0
usb stop # выключить USB
usb reset # перезапустить USB
Чтение файловых систем
Список файлов
ls mmc 0:1 / # корень первого раздела eMMC
ls mmc 1:1 /boot # /boot на SD
ls usb 0:1 /
Прочитать файл в RAM
load mmc 0:1 ${kernel_addr_r} /boot/Image
load usb 0:1 0x4000000 /boot/armbianEnv.txt
Показать содержимое памяти — md (memory display)
md[.суффикс] <адрес> [<длина>]
Суффикс — размер элемента: .b (байт), .w (16 бит), .l (32 бит, дефолт),
.q (64 бит). Длина — количество элементов, не байт. Если не указана — 64.
md.b 0x4000000 0x100 # 256 байт hex+ASCII
md.l 0x4000000 0x40 # 64 long-слова = 256 байт
md 0x4000000 # дефолт: 64 long-слова
После первого md можно жать просто md без аргументов — продолжит с того
места где остановился.
Связанные: mw (memory write), cp (copy), cmp (compare) — те же суффиксы.
Показать содержимое файла
load usb 0:1 0x4000000 /etc/hostname
md.b 0x4000000 0x100
Поддерживаемые ФС
ext2/3/4, FAT, exFAT (если включено в defconfig). Для exFAT в mainline нужен
CONFIG_FS_EXFAT=y.
Boot targets и порядок загрузки
Посмотреть текущий
printenv boot_targets
printenv bootcmd
Изменить временно (до перезагрузки)
setenv boot_targets "usb0 mmc1 mmc0"
boot
Сохранить навсегда
setenv boot_targets "usb0 mmc1 mmc0"
saveenv
saveenv пишет env в ту память, откуда U-Boot его читает (обычно eMMC offset).
Если env корраптится или не сохраняется — проверь CONFIG_ENV_IS_IN_* в defconfig.