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 (většinou starších 32 bitových) 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. dtb by měl být obsažen přímo ve firmwaru zařízení, ale ve skutečnosti je často třeba nahrát novější verzi.
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}
![]() |
Poznámka |
---|---|
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é |
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 bootcmd_usb0
.
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 bootcmd_usb0
.