Devices zoals de Raspberry Pi of BeagleBone Black gebruiken niet Grub als bootloader, maar U-Boot. Hier volgen enkele praktische tips om snel aan de slag te gaan met U-Boot.

 

1. Console
Veel BeagleBones en Pi’s staan in de meterkast en zijn alleen te bereiken via het netwerk. Maar om het bootproces te troubleshooten, heb je echt wel console access nodig tot je device. Daarvoor heb je twee opties: of je sluit een scherm, toetsenbord en muis aan, of je zet een seriële verbinding op. Over die laatste optie lees je meer in de /admin-rubriek van dit nummer. Heb je meerdere Linux-devices in je meterkast staan? Sluit de seriële kabel van je Pi dan zeker aan op één van die andere devices. Zo kun je vanaf elke computer in je netwerk een seriële verbinding met je Pi opzetten via dat andere apparaat!
2. Shell
Net zoals Grub bevat U-Boot ook een interactieve shell. Deze is ideaal om mee te experimenteren. Zolang je geen configuratiewijzigingen wegschrijft, kun je weinig verkeerd doen. Je komt in de shell terecht door een willekeurige toets in te drukken, zodra U-Boot gestart is. Het commando ‘help’ toont een behoorlijk lange lijst van alle ondersteunde commando’s. Voeg een commandonaam toe voor meer informatie over dat specifieke commando, bijvoorbeeld ‘help printenv’. Met het commando ‘boot’ vervolg je het normale boot-proces, zoals bepaald in de variabele ‘bootcmd’.
3. Variabelen
De U-Boot configuratie maakt veelvuldig gebruik van variabelen, die je kunt uitlezen of aanpassen met ‘printenv’ en ‘setenv’. Neem bijvoorbeeld de bootcmd-variabele: die bevat een lijst van uit te voeren commando’s om te booten. In die lijst vind je weer heel wat andere variabelen terug, zoals mmcdev, bootpart en mmcboot. Zowel de onboard opslagruimte als de MicroSD-kaart worden door U-Boot behandeld als MMC-devices. Het bootcmd uit afbeelding 1 probeert dus eerst van partitie 1 op MMC-device 0 te booten en daarna van partitie 1 op MMC-device 1. Gebruik het commando ‘part list mmc 0’ om de partitietabel van een MMC-device te tonen. Daaruit blijkt dat device 0 een MicroSD-kaart van 8GB is en device 1 de 2GB onboard storage. (Vergeet niet dat je het aantal sectoren met twee moet vermenigvuldigen om de grootte in kilobytes te verkrijgen.)  

 

 

 

 

 

 

4. Bootvolgorde
Standaard boot onze BeagleBone dus van de MicroSD-kaart. Wil je terug booten vanaf de onboard storage? Vervang dan “mmcdev 1” door “mmcdev 0” en “bootpart 1:1” door “bootpart 0:1” en omgekeerd. Dat doe je met:

 

*** LISTING ***

 

setenv bootcmd “setenv umsmedia 0; …”

 

*** EINDE LISTING ***

 

Zorg ervoor dat de volledige string voor de bootcmd-variabele tussen dubbele aanhalingstekens staat, anders raakt U-Boot in de war. Verifieer met printenv of de variabele correct staat en boot daarna met het boot-commando.
5. Permanent wijzigen
Kun je probleemloos booten met je gewijzigde configuratie? Keer dan terug naar de U-Boot-shell, pas de configuratie opnieuw aan (de wijzigingen waren immers niet bewaard!) en bewaar ze nadien met het ‘saveenv’-commando. Helaas is saveenv niet beschikbaar in de standaard images voor de BeagleBone. Het bootproces werkt daar namelijk iets anders:

 

  • Is er een MicroSD-kaart aanwezig? Dan boot U-Boot vanaf die kaart (partitie 1 is een FAT-partitie met de bootloader en bijbehorende configuratiebestanden, partitie 2 is de Linux-partitie).

  • Is er GEEN MicroSD-kaart aanwezig? Dan boot U-Boot vanaf de onboard storage (wederom verdeeld in twee partities).

    Afhankelijk hiervan wordt het bestand uEnv.txt ingelezen vanaf /dev/mmcblk0p1 of /dev/mmcblk1p1. Je zal ook zien dat het uEnv.txt-bestand op de FAT-partitie bijkomend het bestand /boot/uEnv.txt vanaf de Linux-partitie inleest. Op die manier kun je weer allerlei U-Boot-parameters overschrijven.

    6. En verder
    Het bootproces met U-Boot lijkt redelijk complex, maar met een seriële verbinding is het gemakkelijk te troubleshooten. De U-Boot shell bevat een prima helpfunctie en ook online vind je voldoende documentatie (www.denx.de/wiki/DULG/Manual). Wil je booten vanaf een USB-schijf of een NFS-server? Ook dat is mogelijk, dus aarzel vooral niet om te experimenteren!