5.1. Pornirea programului de instalare pe 32-bit hard-float ARMv7

5.1.1. Formate de imagine de pornire

Pe sistemele bazate pe ARM, în cele mai multe cazuri, se utilizează unul dintre cele două formate pentru imaginile de pornire: a) nuclee standard Linux în format zImage (vmlinuz) împreună cu Linux standard (initrd.gz ) sau b) nuclee în format uImage (uImage) împreună cu imaginile ramdisk inițiale corespunzătoare (uInitrd).

uImage/uInitrd sunt formate de imagine concepute pentru firmware-ul U-Boot care este utilizat pe multe sisteme bazate pe ARM (mai ales pe 32 de biți). Versiunile mai vechi U-Boot pot porni numai fișiere în format uImage/uInitrd, așa că acestea sunt adesea folosite pe sisteme armel mai vechi. Versiunile mai noi U-Boot pot - pe lângă pornirea uImages/uInitrd-uri - să pornească și nucleuri standard Linux și imagini ramdisk, dar sintaxa comenzii pentru a face acest lucru este ușor diferită de cea pentru pornirea uImages.

Pentru sistemele care utilizează un nucleu multiplatformă, pe lângă nucleu și imaginea ramdisk inițială, este necesar un așa-numit fișier de arbore de dispozitive (sau device-tree blob, dtb). Acesta este specific fiecărui sistem suportat și conține o descriere a componentelor și dispozitivelor specifice fiecărui sistem suportat. Dtb-ul ar trebui să fie furnizat de către firmware-ul sistemului, dar, în practică, de multe ori trebuie încărcat unul mai nou.

5.1.2. Configurarea consolei

Arhiva comprimată netboot (Secțiune 5.1.3.2, „Arhivă comprimată „netboot” pre-construită”) și imaginile cardului SD de instalare (Secțiune 5.1.5, „Folosind imagini de card SD pre-construite cu programul de instalare”) utilizează consola implicită ( specifică platformei) care este definită de U-Boot în variabila console. În cele mai multe cazuri, aceasta este o consolă serială, deci pe acele platforme aveți nevoie implicit de un cablu de consolă serială pentru a utiliza programul de instalare.

Pe platformele care acceptă și o consolă video, puteți modifica variabila console U-Boot în consecință dacă doriți ca programul de instalare să pornească pe consola video.

5.1.3. Pornire prin TFTP

Pornirea din rețea necesită să aveți o conexiune la rețea și un server de pornire în rețea TFTP (și probabil, de asemenea, un server DHCP, RARP sau BOOTP pentru configurarea automată a rețelei).

Configurarea serverului pentru a accepta pornirea din rețea este descrisă în Secțiune 4.3, „Pregătirea fișierelor pentru pornirea prin rețea utilizînd TFTP”.

5.1.3.1. Pornirea prin TFTP din U-Boot

Pornirea din rețea pe sistemele care utilizează firmware-ul U-Boot constă în trei pași: a) configurarea rețelei, b) încărcarea imaginilor (nucleu/imaginea ramdisk inițială/dtb) în memorie și c) executarea efectivă a codului încărcat anterior.

Mai întâi trebuie să configurați rețeaua, fie automat prin DHCP rulând

setenv autoload no
dhcp

fie manual setând mai multe variabile de mediu

setenv ipaddr <adresa IP a clientului>
setenv netmask <masca de rețea>
setenv serverip <adresa IP a serverului tftp>
setenv dnsip <adresa IP a serverului de nume>
setenv gatewayip <adresa IP a pasarelei implicite>

Dacă preferați, puteți face aceste configurări permanente rulând

saveenv

După aceea, trebuie să încărcați imaginile (nucleu/imaginea ramdisk inițială/dtb) în memorie. Acest lucru se face cu comanda «tftpboot», care trebuie furnizată cu adresa la care imaginea va fi stocată în memorie. Din păcate, adresa din memorie poate varia de la un sistem la altul, așa că nu există o regulă generală care să poată fi folosită pentru aceasta.

Pe unele sisteme, U-Boot predefinește un set de variabile de mediu cu adrese de încărcare adecvate: kernel_addr_r, ramdisk_addr_r și fdt_addr_r. Puteți verifica dacă sunt definite rulând:

printenv kernel_addr_r ramdisk_addr_r fdt_addr_r

Dacă nu sunt definite, trebuie să verificați documentația sistemului dumneavoastră pentru valorile adecvate și să le stabiliți manual. Pentru sistemele bazate pe SOC-uri Allwinner SunXi (de exemplu Allwinner A10, numele arhitecturii sun4i sau Allwinner A20, numele arhitecturii sun7i), puteți, să utilizați de exemplu, următoarele valori:

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

Când adresele de încărcare sunt definite, puteți încărca imaginile în memorie de pe serverul tftp definit anterior cu

tftpboot ${kernel_addr_r} <numele de fișier al imaginii nucleului>
tftpboot ${fdt_addr_r} <numele de fișier al dtb>
tftpboot ${ramdisk_addr_r} <numele de fișier al imaginii ramdisk inițiale>

A treia parte este definirea liniei de comandă a nucleului și executarea efectivă a codului încărcat. U-Boot transmite conținutul variabilei de mediu bootargs ca linie de comandă către nucleu, astfel încât orice parametri pentru nucleu și pentru programul de instalare - cum ar fi dispozitivul de consolă (consultați Secțiune 5.3.1, „Pornirea consolei seriale”) sau opțiunile de preconfigurare (a se vedea Secțiune 5.3.2, „Parametrii programului de instalare Debian” și Anexa B, Automatizarea instalării folosind preconfigurarea) - pot fi stabilite cu o comandă ca

setenv bootargs console=ttyS0,115200 rootwait panic=10

Comanda exactă pentru a executa codul încărcat anterior depinde de formatul de imagine utilizat. Cu uImage/uInitrd, comanda este:

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

iar cu imaginile native Linux este:

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

Notă: Când porniți imagini standard Linux, este important să încărcați imaginea ramdisk inițială după nucleu și dtb, deoarece U-Boot stabilește variabila dimensiunii fișierului la dimensiunea ultimului fișier încărcat, iar comanda bootz necesită dimensiunea imaginii ramdisk-ului. ca să funcționeze corect. În cazul pornirii unui nucleu specific platformei, adică un nucleu fără arbore de dispozitive, pur și simplu omiteți parametrul ${fdt_addr_r}.

5.1.3.2. Arhivă comprimată „netboot” pre-construită

Debian furnizează o arhivă comprimată pre-construită ( .../images/netboot/netboot.tar.gz ) care poate fi pur și simplu despachetată pe serverul dvs. tftp și conține toate fișierele necesare pentru pornirea prin rețea. De asemenea, include un script de pornire care automatizează toți pașii pentru a încărca programul de instalare. Versiunile U-Boot moderne conțin o funcție de pornire automată tftp care devine activă dacă nu există un dispozitiv de stocare local care poate fi pornit (MMC/SD, USB, IDE/SATA/SCSI) și apoi încarcă acest script de pornire de pe serverul tftp. Condiția prealabilă pentru utilizarea acestei caracteristici este să aveți un server dhcp în rețea care furnizează clientului adresa serverului tftp.

Dacă doriți să declanșați funcția de pornire automată tftp din linia de comandă U-Boot, puteți utiliza următoarea comandă:

run bootcmd_dhcp

Pentru a încărca manual scriptul de pornire furnizat de arhiva comprimată, puteți, alternativ, să lansați următoarele comenzi la promptul U-Boot:

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

5.1.4. Pornirea de pe un stick USB în U-Boot

Multe versiuni U-Boot moderne au suport pentru USB și permit pornirea de pe dispozitive de stocare în masă USB, cum ar fi stick-urile USB. Din păcate, pașii exacți necesari pentru a face asta pot varia destul de mult de la dispozitiv la dispozitiv.

U-Boot v2014.10 a introdus un cadru comun de gestionare a liniei de comandă și de pornire automată. Acest lucru permite construirea de imagini de pornire generice care funcționează pe orice sistem care implementează acest cadru. debian-installer acceptă instalarea de pe un stick USB pe astfel de sisteme, dar, din păcate, nu toate platformele au adoptat încă acest nou cadru.

Pentru a construi un stick USB capabil să pornească pentru a instala Debian, despachetați arhiva comprimată „hd-media” (a se vedea Secțiune 4.2.1, „Unde găsiți fișierele de instalare”) pe un stick USB formatat cu un sistem de fișiere acceptat de versiunea U-Boot de pe dispozitiv. Pentru versiunile U-Boot moderne, oricare dintre FAT16 / FAT32 / ext2 / ext3 / ext4 funcționează de obicei. Apoi copiați fișierul imagine ISO al primului CD sau DVD Debian de instalare pe stick.

Cadrul de pornire automată din versiunile U-Boot moderne funcționează similar cu opțiunile de ordonare a pornirii dintr-un BIOS/UEFI de PC, adică verifică o listă de dispozitive de pornire posibile pentru o imagine de pornire validă și o pornește pe prima pe care o găsește. Dacă nu este instalat niciun sistem de operare, conectarea stick-ului USB și pornirea sistemului ar trebui să conducă la pornirea programului de instalare. De asemenea, puteți iniția oricând procesul de pornire USB din promptul U-Boot, introducând comanda run bootcmd_usb0.

O problemă care poate apărea la pornirea de pe un stick USB în timp ce utilizați o consolă serială poate fi o nepotrivire a vitezei de transmisie a consolei. Dacă o variabilă de consolă este definită în U-Boot, scriptul de pornire debian-installer o transmite automat nucleului pentru a definii dispozitivul principal de consolă și, dacă este cazul, viteza de transmisie a consolei. Din păcate, manipularea variabilei consolei variază de la platformă la platformă - pe unele platforme, variabila consolei include viteza de transmisie (ca în console=ttyS0,115200), în timp ce pe alte platforme variabila consolei conține doar dispozitivul (ca în console=ttyS0). Cel din urmă caz duce la o ieșire consolă deformată atunci când viteza de transmisie implicită diferă între U-Boot și nucleu. Versiunile U-Boot moderne folosesc adesea 115200 baud, în timp ce nucleul încă mai folosește standardul tradițional de 9600 baud. Dacă se întâmplă acest lucru, ar trebui să definiți manual variabila consolei ca să conțină viteza de transmisie corectă pentru sistemul dvs. și apoi să porniți programul de instalare cu comanda run bootcmd_usb0.

5.1.5. Folosind imagini de card SD pre-construite cu programul de instalare

Pentru un număr de sisteme, Debian oferă imagini de card SD care conțin atât U-Boot, cât și debian-installer. Aceste imagini sunt furnizate în două variante - una pentru descărcarea pachetelor software prin rețea (disponibilă la .../images/netboot/SD-card-images/ ) și una pentru instalări „offline” folosind un CD/DVD Debian (disponibilă la .../images/hd-media/SD-card-images/ ). Pentru a economisi spațiu și lățimea de bandă a rețelei, imaginile constau din două părți - o parte dependentă de sistem numită firmware.<tipul_de_system>.img.gz și o parte independentă de sistem numită partition.img.gz.

Pentru a crea o imagine completă din cele două părți în sistemele Linux, puteți utiliza «zcat» după cum urmează:

zcat firmware.<tipul_de_sistem>.img.gz partition.img.gz > imaginea_completă.img

În sistemele Windows, mai întâi trebuie să decomprimați cele două părți separat, ceea ce se poate face de exemplu utilizând 7-Zip și apoi concatenați părțile descomprimate împreună, rulând comanda

copy /b firmware.<tipul_de_sistem>.img + partition.img imaginea_completă.img

într-o fereastră Windows CMD.exe.

Scrieți imaginea rezultată pe un card SD, de exemplu rulând următoarea comandă pe un sistem Linux:

cat imaginea_completă > /dev/DISPOZITIVUL_CARD_SD

După conectarea cardului SD la sistemul țintă și pornirea sistemului, programul de instalare este încărcat de pe cardul SD. Dacă utilizați varianta hd-media pentru instalări „offline”, trebuie să oferiți instalatorului acces la primul CD/DVD Debian pe un mediu separat, care poate, de exemplu să fie o imagine ISO CD/DVD pe un stick USB.

Când ajungeți la pasul de partiționare din programul de instalare (consultați Secțiune 6.3.4, „Partiționarea și selectarea punctelor de montare”), puteți șterge sau înlocui orice partiții anterioare de pe card. Odată pornit programul de instalare, acesta rulează complet în memoria principală a sistemului și nu mai are nevoie să acceseze cardul SD, așa că puteți utiliza cardul complet pentru instalarea Debian. Cel mai simplu mod de a crea un tabel de partiții adecvat pe cardul SD este să lași instalatorul să creeze automat unul pentru tine (consultați Secțiune 6.3.4.2, „Partiționarea ghidată”).