Systémy založené na architektuře ARM většinou používají dva formáty zaváděcích obrazů:
Standardní linuxové jádro ve formátu zImage („vmlinuz“) spolu se standardním linuxovým ramdiskem („initrd.gz“).
Jádro ve formátu uImage („uImage“) ve spojení s odpovídajícím ramdiskem („uInitrd“).
Formáty uImage/uInitrd jsou speciálně navrženy pro firmware u-boot, který se používá na mnoha ARMových systémech. Starší verze u-bootu uměly zavádět pouze soubory ve formátu uImage/uInitrd, proto se používají hlavně na starších systémech armel. Novější verze u-bootu již umí kromě uImage/uInitrd zavádět také standardní linuxová jádra a initrd, ale syntaxe se trošku liší.
Na systémech používajících multiplatformní jádro je kromě jádra a initrd ještě zapotřebí soubor se stromem zařízení (device-tree blob, „dtb“), který je specifický pro každý systém a obsahuje popis toho konkrétního hardwaru.
Zavedení se sítě vyžaduje síťové připojení, funkční TFTP server a nejspíš i DHCP, RARP nebo BOOTP server pro automatické nastavení sítě.
Nastavení zavádění ze sítě je popsáno v 4.3 – „Příprava souborů pro zavedení ze sítě pomocí TFTP“.
Zavedení ze sítě přes firmware u-boot se skládá ze tří kroků: nastavení sítě, zavedení obrazů jádra, initrd a dtb do paměti a konečně spuštění nahraného jádra.
Síť můžete nastavit buď automaticky pomocí DHCP:
setenv autoload no
dhcp
nebo ručně nastavením několika proměnných:
setenv ipaddr
ip_adresa_klienta
setenv netmask
maska
setenv serverip
ip_adresa_TFTF_serveru
setenv dnsip
ip_adresa_DNS_serveru
setenv gatewayip
ip_adresa_výchozí_brány
Budete-li chtít toto nastavení uložit trvale, použijte příkaz
saveenv
Nyní musíte nahrát obrazy jádra, initrd a dtb do paměti, což se provádí příkazem tftpboot. jako parametr příkazu musíte zadat adresu v paměti, na kterou se má obraz nahrát. Bohužel, mapa paměti se liší systém od systému a proto zde nemůžeme vypsat pevné adresy platné pro všechny.
Na některých systémech si u-boot předdefinovává proměnné prostředí
s vhodnými adresami. Jsou to proměnné
kernel_addr_r
, ramdisk_addr_r
a fdt_addr_r
. Zda jsou ve vašem případě nastaveny,
a připraveny k použití, si můžete ověřit příkazem
printenv kernel_addr_r ramdisk_addr_r fdt_addr_r
Nejsou-li definovány, budete si muset konkrétní hodnoty zjistit v dokumentaci k vašemu systému a nastavit je ručně. Například na systémech založených na SOC Allwinner SunXi (třeba Allwinner A10, architektura „sun4i“ nebo Allwinner A20, architektura „sun7i“) můžete použít následující hodnoty:
setenv kernel_addr_r 0x46000000
setenv fdt_addr_r 0x47000000
setenv ramdisk_addr_r 0x48000000
Po nastavení adres můžete stáhnout obrazy z dříve definovaného TFTP serveru a nahrát je do paměti příkazy:
tftpboot ${kernel_addr_r}
název_souboru_s_obrazem_jádra
tftpboot ${fdt_addr_r}
název_souboru_s_dtb
tftpboot ${ramdisk_addr_r}
název_souboru_s_obrazem_initrd
Nyní zbývá nastavit parametry jádra a spustit ho. U-boot předá jádru
parametry přes proměnnou prostředí bootargs
, takže
do ní nastavte veškeré potřebné parametry jádra a instalačního
systému, jako je třeba konzole (5.3.1 – „Zavěděcí konzole“) nebo
přednastavení (5.3.2 – „Parametry instalačního programu“ a B – „Automatizování instalací pomocí přednastavení“). Například:
setenv bootargs console=ttyS0,115200 rootwait panic=10
Samotné spuštění jádra závisí na použitém formátu. Pro uImage/uInitrd vypadá příkaz následovně:
bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}
a pro nativní linuxový formát takto:
bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}
Při zavádění standardních linuxových obrazů je důležité nahrát obraz
úvodního ramdisku až po jádru a dtb, jelikož u-boot automaticky uloží
do proměnné filesize
velikost posledně nahraného
souboru. Aby příkaz bootz fungoval správně,
potřebuje znát velikost ramdisku, kterou mu předáte právě z proměnné
filesize
. Jestliže zavádíte jádro sestavené pro
konkrétní platformu (tj. bez stromu zařízení), jednoduše vynechte
parametr ${fdt_addr_r}
.
Mnohé moderní verze u-bootu podporují USB a umožňují zavádět z úložných USB zařízení, jako jsou třeba USB klíčenky. Přesný postup se ale bohužel liší systém od systému.
U-Boot v2014.10 přinesl sjednocené zpracování příkazové řádky
a framework pro automatické zavádění. To umožňuje vytvářet obecné
zaváděcí obrazy, které pracují na všech systémech implementujících
tento framework. debian-installer
na těchto systémech podporuje instalaci z USB
zařízení.
Pro vytvoření USB klíčenky pro instalaci Debianu musí USB klíčenka obsahovat souborový systém podporovaný u-bootem (novější verze obvykle podporují FAT16, FAT32, ext2, ext3 a ext4). Na tento souborový systém rozbalte archiv hd-media (viz 4.2.1 – „Kde se nalézají instalační obrazy?“) a pak přikopírujte ISO obraz prvního instalačního CD/DVD Debianu.
Framework pro automatické zavádění v novějších verzích u-bootu funguje
podobně jako volby pro zavádění v BIOSu PC, tj. postupně prozkoumá
seznam možných zaváděcích zařízení, zda na nich nenalezne platný
zaveditelný obraz a spustí první, který nalezne. Pokud na zařízení
není nainstalovaný žádný operační systém, mělo by zasunutí USB
klíčenky a zapnutí systému způsobit zavedení instalačního systému.
Zavedení z USB můžete také vyvolat ručně na výzvě u-bootu příkazem
run usb_boot
.
Jedním problémem, se kterým byste se mohli potkat při zavádění z USB
a použití sériové konzole, je rozdílné nastavení přenosové rychlosti
konzoly. Je-li v u-bootu nastavena proměnná console, předá ji zaváděcí
skript jádru, aby ji použilo jako primární konzoli a případně
nastavilo přenosovou rychlost. Na některých platformách specifikuje
proměnná console i rychlost (např.
„console=ttyS0,115200“), zatímco na jiných obsahuje pouze
název zařízení („console=ttyS0“). Pokud se výchozí
přenosová rychlost u-bootu (často 115200) liší od výchozí přenosové
rychlosti jádra (tradičních 9600), vede to ve druhém případě
k nečitelnému výstupu. Pokud to nastane, měli byste ručně upravit
proměnnou console, aby obsahovala správnou rychlost pro váš systém,
a pak zavést instalátor příkazem run usb_boot
.