На ARM-системах у більшості випадків використовується один з двох форматів завантажувальних образів: а) стандартний zImage-формат ядра Linux («vmlinuz») у поєднанні зі стандартними початковими образами Linux («initrd.gz») або b) ядро у форматі uImage («uImage») у поєднанні з відповідними початковими образами («uInitrd»).
uImage/uInitrd - формати образів, призначені для прошивки U-Boot, яка використовується на багатьох ARM-системах (переважно 32-розрядних). Старіші версії U-Boot можуть завантажувати лише файли у форматі uImage/uInitrd, тому їх часто використовують на старих системах armel. Новіші версії U-Boot можуть - окрім завантаження uImages/uInitrds - також завантажувати стандартні ядра Linux та образи ramdisk, але синтаксис команди для цього дещо відрізняється від синтаксису команди для завантаження uImages.
Для систем з багатоплатформним ядром, окрім ядра і початкового ramdisk, потрібен так званий файл дерева пристроїв (або blob дерева пристроїв, «dtb»). Він специфічний для кожної підтримуваної системи і містить опис конкретного обладнання. dtb має постачатися на пристрій разом з прошивкою, але на практиці часто потрібно завантажувати новішу версію.
Завантаження з мережі вимагає підключення до мережі та сервера TFTP network boot (і, ймовірно, також DHCP, RARP або BOOTP для автоматичного налаштування мережі).
Налаштування на стороні сервера для підтримки завантаження з мережі описано в Розділ 4.3, «Preparing Files for TFTP Net Booting».
Мережеве завантаження на системах з прошивкою U-Boot складається з трьох кроків: а) налаштування мережі, б) завантаження образів (ядро/початковий ramdisk/dtb) у пам'ять і в) власне виконання попередньо завантаженого коду.
Спочатку вам потрібно налаштувати мережу або автоматично через DHCP, запустивши
setenv autoload no dhcp
or manually by setting several environment variables
setenv ipaddr <ip address of the client> setenv netmask <netmask> setenv serverip <ip address of the tftp server> setenv dnsip <ip address of the nameserver> setenv gatewayip <ip address of the default gateway>
If you prefer, you can make these settings permanent by running
saveenv
Після цього Вам потрібно завантажити образи (kernel/initial ramdisk/dtb) у пам'ять. Це робиться за допомогою команди tftpboot, яка повинна бути надана з адресою, за якою образ буде збережений у пам'яті. На жаль, карта розподілу пам'яті може відрізнятися в різних системах, тому на цей випадок, на жаль, немає загального правила які адреси для цього можуть бути використані.
На деяких системах U-Boot predefines набір змінних середовища з відповідними адресами навантаження: kernel_addr_r, ramdisk_addr_r and fdt_addr_r. Ви можете перевірити, чи вони визначені за допомогою
printenv kernel_addr_r ramdisk_addr_r fdt_addr_r
Якщо вони не визначені, вам необхідно перевірити документацію системи для відповідних значень і встановити їх вручну. Для систем на основі Allwinner SunXi SOCs (наприклад, Allwinner A10, назва архітектури «sun4i» або Allwinner A20, назва архітектури «sun7i»), ви можете наприклад, використовувати такі значення:
setenv kernel_addr_r 0x46000000 setenv fdt_addr_r 0x47000000 setenv ramdisk_addr_r 0x48000000
Коли адреси завантаження визначені, можна завантажити образи у пам'ять з попередньо визначеного сервера tftp з
tftpboot ${kernel_addr_r} <filename of the kernel image> tftpboot ${fdt_addr_r} <filename of the dtb> tftpboot ${ramdisk_addr_r} <filename of the initial ramdisk image>
Третя частина - налаштування командного рядка ядра і власне виконання завантаженого коду. U-Boot передає вміст змінної оточення «bootargs» у вигляді командного рядка до ядра, тому будь-які параметри ядра та програми встановлення - такі як пристрій консолі (див. Розділ 5.3.1, «Послідовна консоль завантаження») або параметри попереднього завантаження (див. Розділ 5.3.2, «Debian Параметри встановлення» та Додаток B, Автоматичне встановлення з готовими відповідями) - можна встановити командою на кшталт
setenv bootargs console=ttyS0,115200 rootwait panic=10
Точна команда для виконання попередньо завантаженого коду залежить від використовуваного формату зображення. Разом з uImage/uInitrd, команда має вигляд
bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}
та з нативними образами Linux це
bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}
Примітка: При завантаженні стандартних образів Linux важливо завантажити початковий образ ramdisk після ядра та dtb, оскільки U-Boot встановлює змінну розміру файлу до розміру останнього завантаженого файлу, також команді bootz для коректної роботи потрібен розмір образу ramdisk. У разі завантаження ядра, залежного від платформи, напр. ядра без структури пристроїв, просто пропустіть параметр ${fdt_addr_r}.