Op systemen die gebaseerd zijn op ARM wordt in de meeste gevallen een van de twee volgende vormen van opstart-images gebruikt: a) een kernel in standaard Linux zImage-indeling (“vmlinuz”) in combinatie met een standaard initiële Linux ramschijf (“initrd.gz”) of b) een kernel in uImage-indeling (“uImage”) in combinatie met een overeenkomstige initiële ramschijf (“uInitrd”).
uImage/uInitrd zijn image-indelingen die ontworpen zijn voor de U-Boot firmware die op veel systemen die op ARM gebaseerd zijn, gebruikt wordt (meestal de 32-bits types). Oudere versies van U-Boot kunnen enkel bestanden in de uImage/uInitrd-indeling opstarten en daarom worden die vaak op oudere armel-systemen gebruikt. Recentere versies van U-Boot kunnen - naast uImages/uInitrds - ook standaard Linux kernels en ramschijf-images opstarten, maar de syntaxis van het commando om dat te doen verschilt lichtjes van die voor het opstarten van uImages.
Systemen die een multiplatformkernel gebruiken hebben naast een kernel en een initiële ramschijf ook nog een zogenaamd apparatenboombestand (of device-tree blob, “dtb”) nodig. Dat is specifiek voor elk ondersteund systeem en bevat een beschrijving van de bewuste hardware. De firmware van het apparaat zou moeten voorzien in de dtb, maar in de praktijk moet vaak een recentere versie geladen worden.
Om over het netwerk te kunnen opstarten moet u een netwerkverbinding hebben en een TFTP netwerk-opstartserver (en wellicht ook een DHCP-, RARP-, of BOOTP-server voor het automatisch configureren van de netwerkinstellingen).
De instellingen aan de kant van de server voor het ondersteunen van opstarten over het netwerk, worden beschreven in Paragraaf 4.3, “Bestanden klaarmaken om over het netwerk op te starten met TFTP”.
Over het netwerk opstarten met systemen die gebruik maken van de U-Boot firmware, omvat drie stappen: a) het netwerk configureren, b) de images (kernel/initiële ramschijf/dtb) in het geheugen laden, en c) de eerder geladen code daadwerkelijk uitvoeren.
Eerst moet u het netwerk configureren, ofwel automatisch via DHCP met de opdrachten
setenv autoload no dhcp
ofwel handmatig door verschillende omgevingsvariabelen in te stellen
setenv ipaddr <ip-adres van de cliënt> setenv netmask <netmasker> setenv serverip <ip-adres van de tftp-server> setenv dnsip <ip-adres van de naamserver> setenv gatewayip <ip-adres van de standaard gateway>
Indien u dit verkiest, kunt u deze instellingen een permanent karakter geven met de opdracht
saveenv
Nadien moet u de images (kernel/initiële ramschijf/dtb) in het geheugen laden. Dit gebeurt met het commando tftpboot, waaraan het adres opgegeven moet worden waar het image in het geheugen geplaatst zal worden. Jammer genoeg kan het indelingsplan van het geheugen verschillend zijn van systeem tot systeem, waardoor er geen algemene regel bestaat voor welke adressen daarvoor gebruikt kunnen worden.
Op sommige systemen stelt U-Boot vooraf een aantal omgevingsvariabelen in met geschikte laadadressen: kernel_addr_r, ramdisk_addr_r en fdt_addr_r. U kunt nagaan of ze ingesteld werden met de opdracht
printenv kernel_addr_r ramdisk_addr_r fdt_addr_r
Indien ze niet gedefinieerd zijn, moet u in de documentatie bij uw systeem nagaan welke waarden geschikt zijn en ze handmatig instellen. Voor systemen die gebaseerd zijn op SunXi SOC's van Allwinner (bijv. de Allwinner A10, met als architectuurnaam “sun4i” of de Allwinner A20, met als architectuurnaam “sun7i”), kunt u bijvoorbeeld de volgende waarden gebruiken:
setenv kernel_addr_r 0x46000000 setenv fdt_addr_r 0x47000000 setenv ramdisk_addr_r 0x48000000
Wanneer de laadadressen gedefinieerd zijn, kunt u de images vanaf de voordien gedefinieerde tftp-server in het geheugen laden met
tftpboot ${kernel_addr_r} <bestandsnaam van het kernel-image> tftpboot ${fdt_addr_r} <bestandsnaam van het dtb> tftpboot ${ramdisk_addr_r} <bestandsnaam van het initiële ramschijf-image>
De derde stap is het instellen van de commandoregel voor de kernel en het daadwerkelijk uitvoeren van de geladen code. U-Boot geeft de inhoud van de omgevingsvariabele “bootargs” als commandoregel door aan de kernel. Dus alle parameters voor de kernel en het installatiesysteem - zoals het apparaat dat de console gebruikt (zie Paragraaf 5.3.1, “Opstart met seriële console”) of opties in het kader van preseeding (vooraf ingestelde antwoorden - zie Paragraaf 5.3.2, “Parameters voor het installatiesysteem van Debian” en Bijlage B, De installatie automatiseren door antwoorden vooraf in te stellen) - kunnen ingesteld worden met een commando zoals
setenv bootargs console=ttyS0,115200 rootwait panic=10
Het exacte commando voor het uitvoeren van de voordien geladen code is afhankelijk van welk van de twee imagevormen gebruikt wordt. Met uImage/uInitrd is het commando
bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}
en met een authentieke Linux-image is het
bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}
Opmerking: Als u standaard Linux images start, is het belangrijk om het image van de initiële ramschijf te laden na de kernel en de dtb, omdat U-Boot de variabele filesize instelt op de grootte van het laatst geladen bestand en het commando bootz de grootte van de ramschijf nodig heeft om correct te werken. Indien u een platformspecifieke kernel start, d.w.z. een kernel zonder apparatenboom, moet u gewoon de parameter ${fdt_addr_r} weglaten.