5.1. Zavedení instalátoru na 32-bit hard-float ARMv7

5.1.1. 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ů: a) Standardní linuxové jádro ve formátu zImage (vmlinuz) spolu se standardním linuxovým ramdiskem (initrd.gz) nebo b) 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.

5.1.2. Nastavení konzoly

Archiv pro zavádění ze sítě (5.1.3.2 – „Předpřipravený netboot archiv“) a obrazy SD karet s instalátorem (5.1.5 – „Použití předpřipravených obrazů SD karet“) používají (platformově závislou) výchozí konzoli, kterou U-Boot definuje v proměnné console. Ve většině případů to je sériová konzole, takže na těchto platformách standardně potřebujete pro použití instalačního systému sériový kabel.

Na platformách, které podporují též video konzoli, můžete příslušně upravit proměnnou U-Bootu console a spustit tak instalační systém na video konzoli.

5.1.3. Zavedení z TFTP

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“.

5.1.3.1. 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 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>

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}.

5.1.3.2. Předpřipravený netboot archiv

Debian poskytuje předpřipravený archiv ( .../images/netboot/netboot.tar.gz ), 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}

5.1.4. Zavedení z USB klíčenky přes 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. 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 – „Where to Find Installation Files“) a pak přikopírujte ISO obraz prvního instalačního CD/DVD Debianu.

The autoboot framework in modern U-Boot versions works similar to the boot ordering options in a PC BIOS/UEFI, i.e. it checks a list of possible boot devices for a valid boot image and starts the first one it finds. If there is no operating system installed, plugging in the USB stick and powering up the system should result in starting the installer. You can also initiate the USB-boot process any time from the U-Boot prompt by entering the run bootcmd_usb0 command.

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.

5.1.5. 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 debian-installerem. Tyto obrazy existují ve dvou variantách. Jedna stahuje balíky ze sítě ( .../images/netboot/SD-card-images/ ), druhá slouží pro offline instalaci z CD/DVD ( .../images/hd-media/SD-card-images/ ). 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 Debianu 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 6.3.4 – „Rozdělení disku a výběr přípojných bodů“), 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 Debianu 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 6.3.4.2 – „Asistované dělení“).