5.1. Arrencada de l'instal·lador en l'arquitectura 32-bit soft-float ARM

5.1.1. Formats d'imatge d'arrencada

En els sistemes basats en ARM, en la majoria de casos, es fa servir un dels dos formats d'imatges d'arrencada: a) nuclis Linux estàndard en format «zImage» («vmlinuz») conjuntament amb disc RAM inicials estàndard de Linux («initrd.gz») o b) nuclis en format «uImage» («uImage») conjuntament amb el corresponent disc RAM inicial («uInitrd»).

«uImage/uInitrd» son formats d'imatges dissenyats pel programari del maquinari («firmware») U-Boot i que es fa servir en molts sistemes basats en ARM (sobretot de 32 bits). Les versions anteriors d'U-Boot només podent arrencar fitxers en els formats «uImage/uInitrd» i per això es fan servir en els sistemes ARM més antics. Les noves versions d'U-Boot poden arrencar imatges «uImage/uInitrd» i també nuclis estàndard Linux així com imatges de dics RAM, tot i què la sintaxis de les ordres que ho fan és significativament diferent a l'arrencada amb «uImage».

Pels sistemes que fan servir nuclis multiplataforma, a més del nucli i el disc RAM incial necessiten un fitxer anomenat dispositiu d'arbres («device-tree» o «device-tree blob», «dtb»). Aquest fitxer és específic per a cada sistema suportat i conté la descripció del maquinari corresponent. Cal que el «dtb» sigui subministrat pel microprogramari del maquinari («firmware»), però a la pràctica, sovint s'ha de carregar un de nou.

5.1.2. Arrencada amb el TFTP

Per arrencar des de la xarxa necessitareu una connexió i un servidor d'arrencada de xarxa TFTP ( i probablement un servidor DHCP, RARP o BOOTP per a la configuració automàtica de la xarxa).

El mètode d'instal·lació per suportar l'arrencada de la xarxa és descriu a Secció 4.3, «Preparació dels fitxers per a l'arrencada en xarxa TFTP».

5.1.2.1. Arrencada TFPT a U-Boot

L'arrencada amb xarxa en sistemes que fan servir el microprogramari («firmware») U-Boot consisteix en tres passos: a) configuració de la xarxa, b) càrrega de les imatges (nucli, dics RAM inicial i «dtb») a la memòria i c) execució del codi carregat prèviament.

Primer cal configurar la xarxa, ja sigui automàticament a través de DHCP executant

setenv autoload no
dhcp

o bé manualment establint els valors de diverses variables d'entorn

setenv ipaddr <ip adreça del client>
setenv netmask <netmask>
setenv serverip <ip aadreça del servidor tftp >
setenv dnsip <ip adreça dels servidor de noms>
setenv gatewayip <ip adreça de la passarel·la predeterminada>

Si ho prefereix, pot fer que aquests ajustos siguin permanents executant

saveenv

Després ha de carregar les imatges (nucli, disc inicial RAM i «dtb») a la memòria. Això es fa executant l'ordre «tftpboot», el qual cal proveir la direcció en la qual està emmagatzemada la imatge a la memòria. Malauradament, el mapa de memòria pot variar entre sistemes, pel que no hi ha una regla general per a les adreces que es puguin fer servir per això.

En diversos sistemes, U-Boot predefineix con conjunt de variables d'entorn amb les adreces de càrrega adequades: «kernel_addr_r», «ramdisk_addr_r» i «fdt_addr_r». Podeu comprovar quines estan definides executant

printenv kernel_addr_r ramdisk_addr_r fdt_addr_r

Si no estan definides, haureu de consultar la documentació del vostre sistema per saber els valors adequats i establir-los manualment. Per a sistemes basats en «Allwinner SunXi SOCs» (p. ex. Allwinner A10, nom d'arquitectura «sun4i» o Allwinner A20, nom d'arquitectura «sun7i»), podeu, per exemple, fer servir els següents valors:

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

Una vegada definides les adreces de càrrega, podeu carregar les imatges a la memòria del servidor tftp prèviament determinat amb

tftpboot ${kernel_addr_r} <nom del fitxer d'imatge del nucli>
tftpboot ${fdt_addr_r} <nom del fitxer del «dtb»>
tftpboot ${ramdisk_addr_r} <nom del fitxer de la imatge inicial del disc RAM>

La tercera part és establir la línia d'ordres del nucli i executar el codi carregat. U-Boot transfereix el contingut de la variable d'entorn «bootargs» com a línies d'ordres al nucli, de manera que els paràmetres per al nucli i l'instal·lador, com el dispositiu de terminal (llegiu Secció 5.3.1, «Terminal d'arrencada») o opcions de configuració (llegiu Secció 5.3.2, «Paràmetres de l'instal·lador Debian» i Apèndix B, Automatització de la instal·lació fent servir una configuració prèvia)- poden establir-se amb ordres del tipus

setenv bootargs console=ttyS0,115200 rootwait panic=10

L'ordre concreta per executar el codi prèviament carregat depèn del format de la imatge que s'utilitzi.Amb «uImage/uInitrd», l'ordre és

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

i amb imatges natives de Linux és

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

Nota: en arrencar imatges estàndard Linux, és important carregar la imatge del disc RAM inicial després que el nucli i el «dtb» com a U-Boot estableixin la variable de la mida de fitxer amb el valor de la mida del darrer fitxer carregat i l'ordre «bootz» requereixi la mida de la imatge de disc RAM per a treballar correctament. En el cas d'arrencar un nucli específic de la plataforma, p. ex. un nucli sense arbre de dispositius, simplement ometeu el paràmetre ${fdt_addr_r}.

5.1.3. Arrencada des d'una memòria USB a U-Boot

Algunes versions modernes d'U-Boot accepten USB i permeten l'arrencada des de dispositius d'emmagatzematge massiu com les memòries USB. Malauradament, les etapes requerides per això poden variar bastant segons el dispositiu.

U-Boot v2014.10 proporciona una línia d'ordres comú i un entorn de treball d'arrencada automàtic. Això permet la generació d'imatges d'arrencada genèriques que funcionen amb qualsevol sistema fent servir aquest entorn de treball. El debian-installer permet la instal·lació des d'una memòria USB en molts sistemes, però malauradament no totes les plataformes estan adaptades en aquest nou entorn de treball.

Per preparar una memòria USB arrencable per instal·lar Debian, descomprimiu el fitxer per a mitjans físics (llegiu Secció 4.2.1, «On trobar imatges d'instal·lació») en la memòria USB amb format de sistema d'arxius suportat per la versió d'U-Boot. Per a versions recents d'U-Boot, habitualment, qualsevol dels formats FAT16 / FAT32 / ext2 / ext3 / ext4 funciona. Llavors copieu el fitxer d'imatge ISO del primer CD o DVD d'instal·lació de Debian en la memòria USB.

L'entorn de treball d'auto inici en les versions recents d'U-Boot funciona de forma semblant a les opcions d'ordre d'inici de la BIOS dels PC, p. ex. es comprova el llistat de dispositius d'inici possibles i s'arrenca el primer que respon. Si no hi ha un sistema operatiu instal·lat, connectar la memòria USB i engegar el sistema hauria de posar en marxa el instal·lador. També podeu iniciar el procés d'arrencada des de el USB en qualsevol moment des de la línia d'ordres d'U-Boot executant l'ordre «run bootcmd_usb0».

Un dels problemes que poden presentar-se en arrencar amb una memòria USB quan es fa servir una consola sèrie és que hi hagi un desajust de la velocitat de transmissió. Si la variable de consola està definida en l'U-Bootm, el guió d'arrencada automàtica del debian-installer passa aquesta informació al nucli per establir quin és el dispositiu de consola primari i, si és possible, la velocitat de transmissió de la consola. Malauradament, la gestió de la variable de consola no és la mateixa a totes les plataformes: en algunes plataformes, la variable de consola inclou la velocitat de transmissió (com a «console=ttyS0,115200») i d'altres, la variable de consola només conté el dispositiu (com a «console=ttyS0»). En aquest cas, es produeix un retard en la sortida de la consola quan la velocitat de transmissió per defecte de l'U-Boot i el nucli son distintes. Les versions recents d'U-Boot fan servir 115200 baudis mentre que el nucli encara fa servir el valor clàssic de 9600 baudis. Si passa això, vostè pot establir manualment la variable de consola per a que tengui el valor correcta de la velocitat de transmissió per al seu sistema i llavors engegar el instal·lador amb l'ordre «run bootcmd_usb0».