5.1. Het installatiesysteem starten op 32-bit hard-float ARMv7

5.1.1. Vormen van het opstart-image

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.

5.1.2. De configuratie van de console

Het netboot tar-archief (Paragraaf 5.1.3.2, “Voorgecompileerd netboot tar-archief”) en de SD-kaartimages van het installatiesysteem (Paragraaf 5.1.5, “Het installatiesysteem gebruiken met een voorgecompileerd SD-kaartimage”) gebruiken de (platformspecifieke) standaardconsole die door U-Boot gedefinieerd wordt in de variabele console. In de meeste gevallen is dit een seriële console en dus heeft u voor deze platformen standaard een seriële consolekabel nodig om het installatiesysteem te gebruiken.

Op platformen die ook een videoconsole ondersteunen, kunt u de variabele console van U-Boot dienovereenkomstig aanpassen, indien u wilt dat het installatiesysteem op de videoconsole start.

5.1.3. Opstarten via TFTP

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

5.1.3.1. Opstarten via TFTP in U-Boot

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.

5.1.3.2. Voorgecompileerd netboot tar-archief

Debian stelt een voorgecompileerd tar-archief ( .../images/netboot/netboot.tar.gz ) ter beschikking, dat gewoon op uw tftp-server uitgepakt kan worden en alle noodzakelijke bestanden bevat om opstarten over het netwerk mogelijk te maken. Het bevat ook een opstartscript dat alle stappen voor het laden van het installatiesysteem automatiseert. Moderne versies van U-Boot hebben een functie voor automatisch opstarten via tftp dat actief wordt als er geen lokaal opslagapparaat (MMC/SD, USB, IDE/SATA/SCSI) gevonden wordt waarvan opgestart kan worden en die functie laadt dan dat opstartscript vanaf de tftp-server. Voorwaarde om deze functionaliteit te kunnen gebruiken is dat u in uw netwerk een dhcp-server heeft die aan de cliënt het adres van de tftp-server geeft.

Indien u de functie voor automatisch opstarten via tftp vanaf de commandoregel van U-Boot wilt uitlokken, kunt u het volgende commando gebruiken:

run bootcmd_dhcp

Een alternatief is om het opstartscript dat met het tar-archief meekomt, handmatig te laden. Daarvoor kunt u de volgende commando's gebruiken aan de prompt van U-Boot:

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

5.1.4. In U-Boot opstarten vanaf een USB-stick

Veel moderne versies van U-Boot ondersteunen USB en bieden de mogelijkheid om op te starten vanaf USB-massaopslagapparaten, zoals USB-sticks. Jammer genoeg kunnen de exacte stappen die daarvoor nodig zijn nogal wat verschillen van apparaat tot apparaat.

Met U-Boot v2014.10 werd een gemeenschappelijk commandoregelgebruik geïntroduceerd en een raamwerk voor automatisch opstarten. Dit maakt het mogelijk om algemene opstart-images te bouwen die werken op elk systeem dat dit raamwerk gebruikt. Op dergelijke systemen ondersteunt debian-installer een installatie vanaf USB-stick, maar jammer genoeg hebben nog niet alle platformen reeds dit raamwerk overgenomen.

Om een opstartbare USB-stick te bouwen om Debian te installeren, moet u het tar-archief hd-media (zie Paragraaf 4.2.1, “Waar u installatiebestanden kunt vinden”) uitpakken op een USB-stick die geformatteerd werd met een bestandssysteem dat ondersteund wordt door de versie van U-Boot op uw apparaat. Moderne versies van U-Boot kunnen gewoonlijk werken met FAT16 / FAT32 / ext2 / ext3 / ext4. Nadien moet u het ISO-imagebestand van de eerste Debian installatie-CD of -DVD naar de stick kopiëren.

Het raamwerk voor automatisch opstarten van moderne U-Boot-versies heeft een gelijkaardige werking als de opstartvolgordeopties in het BIOS/UEFI van een PC. Het controleert dus een lijst van mogelijke opstartapparaten op een geldig opstartimage en start het eerste dat het vindt, op. Indien er geen besturingssysteem geïnstalleerd is, zou het inpluggen van de USB-stick en het aanzetten van het systeem moeten uitmonden in het opstarten van het installatiesysteem. U kunt het proces van het opstarten vanaf USB ook op elk ogenblik uitlokken aan de prompt van U-Boot met het commando run bootcmd_usb0.

Een probleem dat zich kan stellen bij het opstarten vanaf een USB-stick terwijl u een seriële console gebruikt, is een verkeerde baudsnelheid van de console. Indien de variabele console gedefinieerd werd in U-Boot, geeft het opstartscript van debian-installer dit automatisch door aan de kernel voor het instellen van het primaire console-apparaat en, in voorkomend geval, de baudsnelheid van de console. Jammer genoeg verschilt de wijze van aanpakken van de variabele console van platform tot platform - op sommige platformen bevat de variabele console de baudsnelheid (zoals bij console=ttyS0,115200), terwijl op andere platformen de variabele console enkel het apparaat bevat (zoals bij console=ttyS0). In dit laatste geval krijgt u een verknoeide uitvoer op de console als U-Boot en de kernel een verschillende standaard baudsnelheid hebben. Moderne versies van U-Boot gebruiken vaak een baud van 115200, terwijl de kernel nog steeds als standaard de traditionele 9600 baud gebruikt. Als dit zich voordoet, moet u de variabele console handmatig instellen, zodat hij de voor uw systeem correcte baudsnelheid bevat, en moet u nadien het installatiesysteem starten met het commando run bootcmd_usb0.

5.1.5. Het installatiesysteem gebruiken met een voorgecompileerd SD-kaartimage

Voor een aantal systemen stelt Debian SD-kaartimages ter beschikking die zowel U-Boot als debian-installer bevatten. Deze images zijn in twee varianten beschikbaar - een variant waarbij de softwarepakketten over het netwerk opgehaald worden (te vinden op .../images/netboot/SD-card-images/ ) en een variant voor offline-installaties waarbij een Debian CD/DVD gebruikt wordt (te vinden op .../images/hd-media/SD-card-images/ ). Om ruimte en netwerkbandbreedte te sparen bestaan de images uit twee delen - een systeemafhankelijk gedeelte met de naam firmware.<system-type>.img.gz en een systeemonafhankelijk gedeelte met als naam partition.img.gz.

Om op Linux-systemen een volledig image te maken van de twee onderdelen, kunt u als volgt zcat gebruiken:

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

Op Windows-systemen moet u eerst de beide onderdelen afzonderlijk decomprimeren, wat u bijvoorbeeld kunt doen met 7-Zip, en daarna moet u de gedecomprimeerde delen samenvoegen met het volgende commando in een CMD.exe-venster van Windows:

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

Schrijf het bekomen image naar een SD-kaart, bijvoorbeeld op een Linux-systeem met het volgende commando:

cat volledig_image.img > /dev/SD_KAART_APPARAAT

Als u de SD-kaart op het doelsysteem inplugt en het systeem dan aanzet, zal het installatiesysteem geladen worden van de SD-kaart. Indien u de variant 'hd-media' voor offline installaties gebruikt, moet u het installatiesysteem op een apart medium toegang verlenen tot de eerste Debian CD/DVD, wat bijvoorbeeld een CD/DVD-ISO-image op een USB-stick kan zijn.

Wanneer u in het installatiesysteem toegekomen bent aan de schijfindeling (zie Paragraaf 6.3.4, “Schijfindeling en selectie van aankoppelpunten”), kunt u op de kaart alle eerdere partities verwijderen of vervangen. Eens het installatiesysteem opgestart is, wordt het volledig uitgevoerd in het hoofdgeheugen van het systeem en heeft het geen toegang tot de SD-kaart meer nodig, waardoor u de volledige kaart kunt gebruiken om er Debian op te installeren. De makkelijkste manier om voor de SD-kaart een passend schijfindelingsschema toe te passen, is om dit automatisch te laten doen door het installatiesysteem (zie Paragraaf 6.3.4.2, “Begeleide schijfindeling”).