U-Boot на Raspberry Pi: Когда и зачем
По умолчанию Raspberry Pi использует собственную проприетарную загрузочную цепочку: bootcode.bin, start.elf, config.txt, cmdline.txt, и затем kernel.img. Однако в ряде случаев может понадобиться установить альтернативный загрузчик U-Boot.
Что такое U-Boot?
U-Boot (Universal Bootloader) это гибкий загрузчик для встроенных систем. Он может загружать ядро Linux, выполнять сетевую загрузку (TFTP), поддерживать FAT/ext файловые системы, и предоставлять интерфейс командной строки.
U-Boot часто используется в:
IoT-устройствах
Промышленных контроллерах
Пользовательских сборках Linux
OpenWRT, Buildroot, Yocto и других embedded-сборках
Когда использовать U-Boot на Raspberry Pi?
Если нужно: - Загружать ядро с USB или по сети - Заменить start.elf цепочку загрузки (частично) - Автоматизировать конфигурацию загрузки через скрипты - Вставить промежуточный отладочный загрузчик - Поддерживать мультизагрузку (multi-boot)
Когда не стоит использовать U-Boot: - Если вы довольны стандартной цепочкой - Если вы не используете кастомные образы - Если нужна максимальная совместимость с Raspberry Pi OS
Как это работает на практике?
U-Boot может быть размещён как kernel.img, и Raspberry Pi будет считать его ядром. Далее, U-Boot сам загружает «настоящее» ядро Linux.
Минимальная конфигурация:
config.txt:
kernel=u-boot.bin
enable_uart=1
U-Boot может получить Device Tree (.dtb) и загрузить ядро через extlinux.conf, скрипт boot.scr, или вручную через CLI.
Установка:
Скомпилировать U-Boot с поддержкой RPi 3 (или скачать готовый u-boot.bin)
Переименовать файл в kernel.img или указать kernel=u-boot.bin
Создать boot.scr или extlinux/extlinux.conf с нужной логикой
Отладка:
UART остаётся активным, U-Boot выводит лог в консоль
Можно использовать встроенные команды: printenv, boot, load, mmc, tftp, setenv, saveenv
Заключение:
U-Boot мощный инструмент, если вы строите пользовательскую или промышленную систему. Для классической Raspberry Pi OS он не обязателен, но если вы хотите управлять загрузкой до ядра это ваш выбор.