Если одноплатный компьютер Raspberry Pi, роутер или ТВ-приставка перестал загружаться после неудачной прошивки, первым делом в логах последовательного порта вы увидите строки с приставкой U-Boot — именно этот загрузчик отвечает за старт системы на подавляющем большинстве встраиваемых устройств. U-Boot (Universal Boot Loader, также известный как Das U-Boot) — это свободный загрузчик операционных систем с открытым исходным кодом, предназначенный в первую очередь для встраиваемых устройств на архитектурах ARM, MIPS, PowerPC, RISC-V и x86.
Проще говоря, U-Boot выполняет ту же роль, что BIOS или UEFI на обычном компьютере, но адаптирован под микроконтроллерные и одноплатные системы: он инициализирует память и периферию, находит образ операционной системы, загружает его в оперативную память и передаёт ему управление. Проект распространяется под лицензией GPLv2 и поддерживается большим сообществом разработчиков, поэтому именно его производители чаще всего включают в прошивки роутеров, NAS, принтеров, промышленных контроллеров и медиаплееров.
Как устроен процесс загрузки устройства с U-Boot
Загрузка встраиваемого устройства проходит в несколько этапов. Сразу после подачи питания процессор выполняет код из встроенной ПЗУ (boot ROM), который находит и запускает первичный загрузчик. Во многих системах U-Boot разделён на две части: компактный SPL (Secondary Program Loader), который помещается в ограниченную SRAM и настраивает контроллер оперативной памяти, и основной полнофункциональный U-Boot, загружаемый уже в DRAM.
После инициализации железа U-Boot ищет образ ядра операционной системы — во флеш-памяти, на SD-карте, eMMC, USB-накопителе или по сети через TFTP. Найдя образ, он копирует его в оперативную память, при необходимости подгружает dtb-файл (дерево устройств, описывающее конкретное железо) и передаёт управление ядру. Весь этот процесс на типовой плате занимает от долей секунды до нескольких секунд.
Если автоматическая загрузка не задалась, U-Boot обычно предоставляет короткое окно времени, в течение которого можно нажать любую клавишу в консоли и попасть в интерактивную командную строку загрузчика. Это главный инструмент диагностики и восстановления устройства.
💡U-Boot — это посредник между железом и операционной системой: он инициализирует память, находит образ ОС и передаёт ему управление, а при сбоях даёт доступ к консоли восстановления.