Formáty zaváděcích obrazů
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í z TFTP
&boot-installer-intro-net.xml;
Zavedení z TFTP přes u-boot
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 () nebo
přednastavení ( a ). 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}.
Zavedení z USB klíčenky in u-boot
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. &d-i; na těchto systémech podporuje instalaci z USB
zařízení.
Pro vytvoření USB klíčenky pro instalaci &debian;u 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 )
a pak přikopírujte ISO obraz prvního instalačního CD/DVD &debian;u.
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.