U-Boot

U-Boot (universal boot loader) ist eine Bootloader Software, die auf vielen Mikroprozessoren lauffähig ist und wird v.a. für eingebettete Systeme eingesetzt. Eine spezielle Shell ermöglicht die Eingabe von Befehlen. Zudem lassen sich Umgebungsvariablen persistent speichern. U-Boot benutzt das TFTP-Protokoll und einen entsprechenden Server, um Dateien auf die Zielplattform zu transferieren. U-Boot wurde zusammen mit Linux entwickelt und ein Grossteil des Quellcodes kommt von dort.

Übersetzung

U-Boot kann analog zu einer Kernelübersetzung (siehe Linux-Kernel kreuzkompilieren) erfolgen. Natürlich müssen die passenden Patches für eine bestimmte Zielplattform gemacht werden. Häufig ist eine eigene Übersetzung aber gar nicht notwendig, weil ein Boardhersteller das passende Image bereits mitliefert.

Umgebungsvariablen

Damit U-Boot korrekt laufen kann, müssen Einstellungen für die Bootkonfiguration oder die Konfiguration der Netzwerkadressen in den sog. Umgebungsvariablen vorgenommen werden. Dieses 'Environment' wird üblicherweise in einer separaten Partition des Flashs oder einem EEPROM gespeichert, siehe http://www.denx.de/wiki/publish/DULG/to-delete/UBootCmdGroupEnvironment.html. Mit

printenv

können die aktuellen Einstellungen angezeigt werden. Das Setzen einer Umgebungsvariablen erfolgt am Beispiel der IP-Adresse mit

setenv ipaddr 192.168.1.10

Schlussendlich können diese Einstellungen persistent gespeichert werden, damit sie auch bei einem Neustart wieder zur Verfügung stehen.

saveenv

Typischerweise müssen auch Kommandos für das Booten (an welcher Adresse befindet sich der Kernel und der Device Tree Blob, siehe Device Tree erstellen) sowie Bootargumente vorgegeben werden. Diese Argumente bestimmen z.B. die Adresse und den Typ des Root-File-Systems und die Ausgabe für die Shell.

setenv bootargs console=ttyPSC0,115200 rw root=/dev/mtdblock2 rw rootfstype=jffs2
setenv bcmd_flash bootm 0xfe040000 - 0xfff80000
setenv bootcmd run bcmd_flash

Mit der letzten Einstellung bootet U-Boot automatisch aus dem Flash. Soll sich beispielsweise das Root-File-System auf dem Host befinden, kann mit folgendes Kommando definiert werden:

setenv bcmd_net run bargs_base bargs_nfs

Mit den richtigen Argumenten versehen, bootet nun System über das Netz.