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}.
Předpřipravený netboot archiv
&debian; poskytuje předpřipravený archiv (&armmp-netboot-tarball;),
stačí jednoduše rozbalit na TFTP server a který obsahuje všechny
potřebné soubory pro zavádění ze sítě. Součástí je i zaváděcí skript,
který automatizuje všechny kroky k zavedení instalátoru. Moderní verze
u-bootu podporují vlastnost automatického zavádění z TFTP, která se
aktivuje v případě, že neexistuje lokální úložné zařízení (MMC/SD,
USB, IDE/SATA/SCSI). Předpokladem je, že máte na síti DHCP server,
který klientovi předá adresu TFTP serveru.
Pokud byste chtěli automatické zavádění z TFTP vyvolat z příkazového
řádku u-bootu, můžete použít následující příkaz:
run bootcmd_dhcp
Alternativně můžete dodávaný zaváděcí skript nahrát ručně pomocí
následujících příkazů u-bootu:
setenv autoload no
dhcp
tftpboot ${scriptaddr} /debian-installer/armhf/tftpboot.scr
source ${scriptaddr}
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 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.
Použití předpřipravených obrazů SD karet
Pro mnoho systémů poskytuje &debian; obrazy SD karet, které obsahují
u-boot společně s &d-i;em. Tyto obrazy existují ve dvou variantách.
Jedna stahuje balíky ze sítě (&armmp-netboot-sd-img;), druhá slouží
pro offline instalaci z CD/DVD (&armmp-hd-media-sd-img;). Pro šetření
přenosového pásma jsou obrazy rozděleny na systémově závislou část
firmware.<systém>.img.gz
a společnou část nazvanou partition.img.gz
.
Pro vytvoření kompletního obrazu je třeba tyto dvě části spojit.
Na linuxových systémech můžete použít třeba zcat:
zcat firmware.<systém>.img.gz partition.img.gz > kompletni_obraz.img
Na Windows musíte nejprve obě části rozbalit (např. pomocí programu
7-Zip) a následně tyto rozbalené části spojit dohromady příkazem copy:
copy /b firmware.<systém>.img + partition.img kompletni_obraz.img
spuštěným v příkazovém řádku CMD.exe.
Kompletní obraz pak můžete zapsat na SD kartu.
Na linuxových systémech můžete použít třeba:
cat kompletni_obraz.img > /dev/SD_KARTA
Po zasunutí SD karty do instalovaného systému a jeho zapnutí se z SD
karty automaticky zavede instalační systém. Používáte-li variantu pro
offline instalaci, musíte instalačnímu systému zpřístupnit první
instalační CD/DVD &debian;u na samostatném médiu, jako je například
iso obraz prvního DVD uložený na USB klíčence.
Až se v instalaci dostanete k rozdělení disků (viz krok ), můžete na instalační SD kartě smazat či
nahradit libovolné oblasti, jelikož po zavedení instalátoru již tento
běží kompletně z operační paměti a přístup k SD kartě dále
nepotřebuje. Pro instalaci &debian;u tak můžete využít plnou kapacitu
SD karty. Nejjednodušším způsobem, jak na kartě vytvořit optimální
rozvržení oblastí, je nechat to na instalačním systému (viz ).