5.1. A(z) 32-bit hard-float ARMv7 telepítőjének indítása

5.1.1. Indítóképfájl formátumok

Az ARM-alapú rendszerek esetében a legtöbbször a bootképek kétféle formátuma valamelyikét használják: a) szabványos Linux zImage-formátumú kerneleket (vmlinuz) szabványos Linux initramdiskekkel (initrd.gz) együtt vagy b) uImage-formátumú kerneleket (uImage) a hozzájuk tartozó initramdiskekkel (uInitrd) együtt.

A uImage/uInitrd az U-Boot firmware számára tervezett képfájl formátumok, amelyet sok ARM-alapú rendszeren használnak (főleg 32 biteseken). Régebbi U-Boot verziók csak uImage/uInitrd formátumú fájlokat tudnak indítani, így ezeket gyakran használják régebbi armel rendszereken. Az újabb U-Boot verziók - az uImage/uInitrd indítása mellett - képesek standard Linux kernelek és ramdiszk képfájlok indítására is, de az ehhez szükséges parancsszintaxis kicsit eltér az uImage indításához szükségestől.

A multiplatform kernel használatával rendelkező rendszerek esetében a kernel és a kezdeti ramdiszk mellett egy úgynevezett eszközfa fájlra (vagy eszközfa blobra, dtb) is szükség van. Ez minden támogatott rendszer esetében egyedi, és a konkrét hardver leírását tartalmazza. Az eszközfát elvileg a firmware-nek kellene biztosítania az eszközön, de a gyakorlatban gyakran szükség van egy újabb verzió betöltésére.

5.1.2. Konzol konfiguráció

A netboot tarball (5.1.3.2. szakasz - Előre elkészített netboot tarball), és a telepítő SD-kártya képfájlok (5.1.5. szakasz - Előre elkészített SD-kártya képfájlok használata a telepítővel) az U-Boot által a console változóban meghatározott (platform-specifikus) alapértelmezett konzolt használják. A legtöbb esetben ez egy soros konzol, így ezeken a platformokon alapértelmezés szerint szükséged lesz egy soros konzolkábelre a telepítő használatához.

Azokon a platformokon, amelyek video konzolt is támogatnak, módosíthatod az U-Boot console változóját, ha azt szeretnéd, hogy a telepítő a video konzolon induljon el.

5.1.3. Indítás TFTP-vel

A hálózatról való indításhoz szükséged van hálózati kapcsolatra és egy TFTP hálózati indító szerverre (valamint valószínűleg egy DHCP, RARP vagy BOOTP szerverre az automatikus hálózati konfigurációhoz).

A hálózati indítást támogató szerveroldali beállításokat az 4.3. szakasz - Fájlok előkészítése TFTP hálózati bootoláshoz rész ismerteti.

5.1.3.1. Indítás TFTP-vel U-Boot-ban

A hálózatról való indítás U-Boot firmware-t használó rendszereken három lépésből áll: a) a hálózat konfigurálása, b) a képfájlok (kernel/kezdeti ramdisk/dtb) betöltése a memóriába, és c) a korábban betöltött kód tényleges végrehajtása.

Először konfigurálnod kell a hálózatot, amit megtehetsz automatikusan DHCP-vel, ha futtatod a következőket:

setenv autoload no
dhcp

vagy manuálisan, ha beállítasz néhány környezeti változót:

setenv ipaddr <az klens IP címe>
setenv netmask <alhálózati maszk>
setenv serverip <a tftp szerver IP címe>
setenv dnsip <a névszerver IP címe>
setenv gatewayip <az alapértelmezett átjáró IP címe>

Ha szeretnéd, ezeket a beállításokat állandóvá teheted azzal, hogy futtatod

saveenv

Ezután be kell töltened a képfájlokat (kernel/kezdeti ramdisk/dtb) a memóriába. Ezt a tftpboot parancs segítségével teheted meg, amelyhez meg kell adni azt a címet, ahol a képfájlt a memóriában tárolni kell. Sajnos a memóriatérkép rendszerenként eltérő lehet, így nincs általános szabály arra, hogy mely címeket lehet erre használni.

Egyes rendszereken az U-Boot előre definiál egy sor környezeti változót megfelelő betöltési címekkel: kernel_addr_r, ramdisk_addr_r és fdt_addr_r. Ellenőrizheted, hogy ezek definiálva vannak-e, ha futtatod a következőt:

printenv kernel_addr_r ramdisk_addr_r fdt_addr_r

Ha nincsenek definiálva, akkor meg kell nézned a rendszered dokumentációját a megfelelő értékekért, és manuálisan be kell állítanod őket. Allwinner SunXi SOC-okon alapuló rendszerek esetén (pl. az Allwinner A10, architektúra neve sun4i vagy az Allwinner A20, architektúra neve sun7i) használhatod például a következő értékeket:

setenv kernel_addr_r 0x46000000
setenv fdt_addr_r 0x47000000
setenv ramdisk_addr_r 0x48000000

Amikor a betöltési címek definiálva vannak, betöltheted a képfájlokat a korábban megadott tftp szerverről a következő parancsokkal:

tftpboot ${kernel_addr_r} <a kernel képfájl neve>
tftpboot ${fdt_addr_r} <a dtb fájl neve>
tftpboot ${ramdisk_addr_r} <a kezdeti ramdisk képfájl neve>

A harmadik rész a kernel parancssorának beállítása és a betöltött kód tényleges végrehajtása. Az U-Boot a bootargs környezeti változó tartalmát adja át parancssorként a kernelnek, így bármilyen paramétert a kernelnek és a telepítőnek - mint például a konzoleszköz (lásd 5.3.1. szakasz - Indítás soros konzolon) vagy előbeállítási opciók (lásd 5.3.2. szakasz - Debian Telepítő Paraméterek és B. függelék - Automata telepítés előírással) - beállíthatsz egy olyan paranccsal, mint:

setenv bootargs console=ttyS0,115200 rootwait panic=10

A korábban betöltött kód végrehajtásának pontos parancsa a használt képfájl formátumától függ. uImage/uInitrd esetén a parancs:

bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}

és natív Linux képek esetén az:

bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}

Megjegyzés: Amikor standard Linux képeket indítasz, fontos, hogy a kezdeti ramdisk képfájlt a kernel és a dtb után töltsd be, mivel az U-Boot a filesize változót az utoljára betöltött fájl méretére állítja, és a bootz parancsnak szüksége van a ramdisk kép méretére a helyes működéshez. Ha egy platform-specifikus kernelt indítasz, azaz egy eszközfa nélküli kernelt, egyszerűen hagyd ki a ${fdt_addr_r} paramétert.

5.1.3.2. Előre elkészített netboot tarball

A Debian biztosít egy előre elkészített tarballt ( .../images/netboot/netboot.tar.gz ), amelyet egyszerűen kicsomagolhatsz a tftp szerveredre, és tartalmazza az összes fájlt, ami szükséges a hálózati indításhoz. Emellett tartalmaz egy indító szkriptet is, amely automatizálja a telepítő betöltésének minden lépését. A modern U-Boot verziók tartalmaznak egy tftp automatikus indítási funkciót, amely akkor lép működésbe, ha nincs indítható helyi tárolóeszköz (MMC/SD, USB, IDE/SATA/SCSI), és ekkor betölti ezt az indító szkriptet a tftp szerverről. Ennek a funkciónak a használatához az szükséges, hogy a hálózatodban legyen egy dhcp szerver, amely megadja a kliensnek a tftp szerver címét.

Ha szeretnéd az U-Boot parancssorból elindítani a tftp automatikus indítási funkciót, használd a következő parancsot:

run bootcmd_dhcp

Ha manuálisan szeretnéd betölteni a tarball által biztosított indítószkriptet, akkor alternatívaként kiadhatod a következő parancsokat az U-Boot promptnál:

setenv autoload no
dhcp
tftpboot ${scriptaddr} /debian-installer/armhf/tftpboot.scr
source ${scriptaddr}

5.1.4. Indítás USB kulcsról U-Boot alatt

Sok modern U-Boot verzió rendelkezik USB támogatással, és lehetővé teszi az USB tömegtároló eszközökről, például USB kulcsokról való indítást. Sajnos a pontos lépések, amelyek ehhez szükségesek, eszközönként jelentősen eltérhetnek.

Az U-Boot v2014.10 bevezetett egy közös parancssori kezelési és automatikus indítási keretrendszert. Ez lehetővé teszi olyan általános indítóképek készítését, amelyek bármely rendszeren működnek, amely ezt a keretrendszert megvalósítja. A debian-installer támogatja az USB kulcsról történő telepítést az ilyen rendszereken, de sajnos nem minden platform vette még át ezt az új keretrendszert.

Ahhoz, hogy bootolható USB kulcsot készíts Debian telepítéséhez, csomagold ki a hd-media tarballt (lásd 4.2.1. szakasz - Hol találhatóak a telepítési fájlok) egy olyan fájlrendszerrel formázott USB kulcsra, amelyet az eszközödön lévő U-Boot verzió támogat. A modern U-Boot verziókkal általában bármelyik FAT16 / FAT32 / ext2 / ext3 / ext4 működik. Ezután másold fel a stickre az első Debian telepítő CD vagy DVD ISO kép fájlját.

A modern U-Boot verziókban az automatikus indítási keretrendszer hasonlóan működik, mint a PC BIOS/UEFI indítási sorrend beállításai, azaz ellenőrzi a lehetséges indító eszközök listáját egy érvényes indító képet keresve, és elindítja az elsőt, amit talál. Ha nincs operációs rendszer telepítve, akkor az USB stick csatlakoztatása és a rendszer bekapcsolása elindítja a telepítőt. Az USB-ről történő indítást bármikor kezdeményezheted az U-Boot promptból a run bootcmd_usb0 parancs beírásával.

Egy probléma, ami felmerülhet, amikor USB kulcsról próbálsz indítani soros konzol használata közben, az a konzol baudrate eltérése lehet. Ha egy konzol változó meg van határozva az U-Bootban, a debian-installer boot szkript automatikusan átadja azt a kernelnek, hogy beállítsa az elsődleges konzol eszközt, és ha alkalmazható, a konzol baudrate-et. Sajnos a konzol változó kezelése platformonként eltérő - egyes platformokon a konzol változó tartalmazza a baudrate-et (például console=ttyS0,115200 formában), míg más platformokon a konzol változó csak az eszközt tartalmazza (például console=ttyS0 formában). Az utóbbi esetben a konzol kimenete zavaros lesz, ha az alapértelmezett baudrate különbözik az U-Boot és a kernel között. A modern U-Boot verziók gyakran 115200 baudot használnak, míg a kernel még mindig a hagyományos 9600 baudot használja alapértelmezettként. Ha ez történik, kézzel kell beállítanod a konzol változót, hogy tartalmazza a rendszeredhez megfelelő baudrate-et, majd az run bootcmd_usb0 parancs kiadásával indítsd el a telepítőt.

5.1.5. Előre elkészített SD-kártya képfájlok használata a telepítővel

Számos rendszerhez a Debian biztosít SD kártya képeket, amelyek tartalmazzák mind az U-Bootot, mind a debian-installer-t. Ezek a képek két változatban érhetők el: az egyik a szoftvercsomagok hálózaton keresztüli letöltéséhez (elérhető itt: .../images/netboot/SD-card-images/ ), a másik pedig offline telepítésekhez Debian CD/DVD használatával (elérhető itt: .../images/hd-media/SD-card-images/ ). A hely és a hálózati sávszélesség megtakarítása érdekében a képek két részből állnak: egy rendszerfüggő rész, amelynek neve firmware.<system-type>.img.gz, és egy rendszerfüggetlen rész, amelynek neve partition.img.gz.

Linux rendszereken a két részből teljes képet készíthetsz a zcat használatával az alábbi módon:

zcat firmware.<system-type>.img.gz partition.img.gz > complete_image.img

Windows rendszereken először külön-külön ki kell csomagolnod a két részt, amit például a 7-Zip segítségével tehetsz meg, majd a kicsomagolt részeket össze kell fűznöd a következő parancs futtatásával egy Windows CMD.exe ablakban:

copy /b firmware.<system-type>.img + partition.img complete_image.img

.

Írd fel az elkészült képet egy SD kártyára, például az alábbi parancs futtatásával egy Linux rendszeren:

cat complete_image.img > /dev/SD_CARD_DEVICE

Az SD kártya célrendszerbe helyezése és a rendszer bekapcsolása után a telepítő az SD kártyáról töltődik be. Ha az offline telepítésekhez az hd-media változatot használod, biztosítanod kell a telepítő számára a hozzáférést az első Debian CD/DVD-hez egy külön adathordozón, ami lehet például egy CD/DVD ISO kép egy USB kulcson.

Amikor eljutsz a telepítőben a partícionálási lépéshez (lásd 6.3.4. szakasz - Particionálás és csatolási pont választás), törölheted vagy lecserélheted a kártyán lévő korábbi partíciókat. Miután a telepítő elindult, teljesen a rendszer fő memóriájában fut, és nincs szüksége többé az SD kártya elérésére, így a teljes kártyát felhasználhatod a Debian telepítéséhez. A legegyszerűbb módja annak, hogy megfelelő partíciókiosztást hozz létre az SD kártyán, ha hagyod, hogy a telepítő automatikusan elkészítse neked (lásd 6.3.4.2. szakasz - Irányított Particionálás).