Quellen
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.
U-Boot kann analog zu einer Kernelübersetzung (siehe Linux-Kernel kreuzkompilieren) übersetzt werden. 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.
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.