Boot-Image-Formate Auf ARM-basierten Systemen wird in den meisten Fällen eines dieser beiden Formate für die Boot-Images verwendet: a) Standard-Linux-Kernel im zImage-Format (vmlinuz) zusammen mit einer Standard-Linux-Initial-Ramdisk (initrd.gz) oder b) Kernel im uImage-Format (uImage) zusammen mit dazu zugehöriger Initial-Ramdisk (uInitrd). uImage/uInitrd sind Image-Formate, die für die U-Boot-Firmware ausgelegt wurden, welche auf vielen ARM-basierten Systemen eingesetzt ist. Ältere U-Boot-Versionen können nur Dateien im uImage-/uInitrd-Format booten, daher werden diese Formate oft auf älteren armel-Systemen genutzt. Neuere U-Boot-Versionen können - neben uImage/uInitrd - auch Standard-Linux-Kernel- und Ramdisk-Images booten, aber die Befehlssyntax dafür ist etwas anders als beim Booten von uImages. Für Systeme, die einen Multiplattform-Kernel verwenden, ist zusätzlich zu Kernel- und Initial-Ramdisk-Image noch eine sogenannte Gerätebaum-Datei (auch Gerätebaum-Abbild / device-tree blob, dtb) erforderlich. Diese ist spezifisch für jedes unterstützte System und enthält eine Beschreibung der jeweiligen Hardware. Das dtb sollte eigentlich auf dem Gerät von der Firmware bereitgestellt werden, aber in der Praxis muss oft ein neueres geladen werden. Konfiguration der Konsole Das netboot-Tarball-Archiv () und die SD-Karten-Images des Installers () nutzen die (plattform-spezifische) Standardkonsole, die von U-Boot in der Variable console definiert wird. In den meisten Fällen ist das eine serielle Konsole, daher benötigen Sie auf diesen Plattformen standardmäßig ein serielles Konsolenkabel, um den Installer nutzen zu können. Auf Plattformen, die auch eine Video-Konsole unterstützen, können Sie die console-Variable von U-Boot entsprechend anpassen, wenn Sie möchten, dass der Installer auf der Video-Konsole startet. Konfiguration der Konsole Der grafische Installer ist auf den arm64 &d-i;-Images für Jessie nicht aktiviert, daher wird die serielle Konsole verwendet. Das Konsolengerät sollte automatisch durch die Firmware erkannt werden; falls dies jedoch nicht funktioniert, sehen Sie nach dem Booten von Linux über das GRUB-Menü nur die Nachricht Booting Linux und danach weiter nichts. In diesem Fall müssen Sie eine Konfiguration für eine spezielle Konsole auf der Kernel-Befehlszeile setzen. Drücken Sie im GRUB-Menü e für Edit kernel command-line und ändern Sie --- quiet in console=<gerät>,<geschwindigkeit> , also z.B. console=ttyAMA0,115200n8. Drücken Sie danach Strg x, um das Booten mit der neuen Einstellung fortzusetzen. Installation auf Juno Juno ist ein UEFI-System, daher ist die Installation ziemlich einfach. Die praktischste Methode ist die Installation von einem USB-Stick. Sie benötigen eine aktuelle Firmware, um von USB booten zu können. Builds von &url-juno-firmware; mit einem Datum nach März 2015 wurden diesbezüglich erfolgreich getestet. Konsultieren Sie die Juno-Dokumentation, wie Sie ein Update der Firmware durchführen. Bereiten Sie ein Standard-arm64-CD-Image auf einem USB-Stick vor. Stecken Sie ihn in einen der USB-Ports auf der Rückseite ein. Schließen Sie ein serielles Kabel an den oberen 9-poligen seriellen Anschluß auf der Rückseite an. Falls Sie eine Netzwerkverbindung benötigen (z.B. bei einem netboot-Image), stecken Sie ein Ethernet-Kabel in den Anschluß auf der Vorderseite des Juno ein. Starten Sie jetzt eine serielle Konsole mit 115200 + 8Bit ohne Parität und booten Sie den Juno. Er sollte von dem USB-Stick booten und ein GRUB-Menü anzeigen. Die Konfiguration der Konsole wird auf dem Juno nicht korrekt detektiert, daher bekommen Sie keine Kernel-Ausgabe, wenn Sie einfach nur Enter drücken. Setzen Sie die Konsole auf console=ttyAMA0,115200n8, wie in () beschrieben. Ein anschließendes Drücken von Strgx sollte den &d-i; zur Anzeige bringen; fahren Sie nun wie bei einer normalen Installation fort. Installation auf Applied Micro Mustang Für dieses Gerät ist UEFI verfügbar, allerdings wird es normalerweise mit U-Boot ausgeliefert. Daher können Sie entweder zunächst UEFI-Firmware installieren und dann Standard-Boot- und Installationsmethoden verwenden, oder Sie nutzen Methoden, um mit U-Boot zu booten. Auch wird vom Jessie-Kernel kein USB unterstützt, daher ist eine Installation von USB-Stick nicht möglich. Sie müssen eine serielle Konsole verwenden, um die Installation durchzuführen, da der grafische Installer auf der arm64-Architektur nicht aktiviert ist. Die empfohlene Methode zur Installation ist, Kernel und initrd des &d-i; auf die Festplatte zu kopieren (nutzen Sie dazu das openembedded-System, das dem Gerät beiliegt), und booten Sie anschließend von der Festplatte, um den Installer zu starten. Alternativ können Sie TFTP verwenden, um Kernel, dtb und initrd rüber zu kopieren und zu booten (). Nach der Installation sind manuelle Änderungen nötig, um von dem installierten Image zu booten. Starten Sie eine serielle Konsole mit 115200 + 8Bit ohne Parität und booten Sie das Gerät. Sobald Sie nach dem Neustart die Anzeige Hit any key to stop autoboot: sehen, drücken Sie eine Taste, um einen Mustang#-Prompt zu bekommen. Verwenden Sie dann die entsprechenden U-Boot-Befehle, um Kernel, dtb und initrd zu laden und zu booten. Booten per TFTP &boot-installer-intro-net.xml; TFTP-Boot in U-Boot Das Booten von Systemen über das Netzwerk mittels der U-Boot-Firmware erfordert drei Schritte: a) Konfigurieren des Netzwerks, b) Laden der Images (Kernel/Initial-Ramdisk/dtb) in den Speicher und c) das eigentliche Ausführen des vorher geladenen Codes. Als erstes müssen Sie das Netzwerk konfigurieren, entweder automatisch über DHCP, indem Sie dies ausführen: setenv autoload no dhcp oder manuell, indem Sie verschiedene Umgebungsvariablen setzen: setenv ipaddr <ip-adresse des clients> setenv netmask <netmask> setenv serverip <ip-adresse des tftp-servers> setenv dnsip <ip-adresse des nameservers> setenv gatewayip <ip-adresse des standard-gateways> Falls Sie möchten, können Sie diese Einstellungen auch fest einrichten mit: saveenv Danach müssen Sie die Images (Kernel/Initial-Ramdisk/dtb) in den Speicher laden. Dies wird mit dem tftpboot-Befehl erledigt, der zusammen mit der Adresse, an der das Image im Speicher abgelegt werden soll, angegeben werden muss. Unglücklicherweise kann die Lücke im Speicher von System zu System variieren, daher gibt es keine grundsätzliche Regel, welche Adresse hierfür verwendet werden muss. Auf einigen Systemen legt U-Boot einige Umgebungsvariablen mit passenden Ladeadressen an: kernel_addr_r, ramdisk_addr_r und fdt_addr_r. Sie können überprüfen, ob diese definiert sind, indem Sie dies ausführen: printenv kernel_addr_r ramdisk_addr_r fdt_addr_r Falls sie nicht definiert sind, müssen Sie die Dokumentation des Systems konsultieren bezüglich näherer Angaben zu passenden Werten und diese händisch setzen. Für Systeme, die auf Allwinner SunXi-SoCs (z.B. dem Allwinner A10, Architekturname sun4i oder dem Allwinner A20, Architekturname sun7i) basieren, können Sie z.B. folgende Werte nutzen: setenv kernel_addr_r 0x46000000 setenv fdt_addr_r 0x47000000 setenv ramdisk_addr_r 0x48000000 Sind die Ladeadressen bereits definiert, können Sie die Images von dem vorher definierten TFTP-Server in den Speicher laden mit: tftpboot ${kernel_addr_r} <dateiname des kernel-images> tftpboot ${fdt_addr_r} <dateiname des dtb> tftpboot ${ramdisk_addr_r} <dateiname des initial-ramdisk-images> Der dritte Schritt ist das Setzen der Kernel-Befehlszeile und das eigentliche Ausführen des geladenen Codes. U-Boot übergibt den Inhalt der Umgebungsvariable bootargs als Befehlszeile an den Kernel; also können alle Parameter für den Kernel und den Installer - wie z.B. die Konsolen-Gerätedatei (lesen Sie dazu ) oder eventuelle Voreinstellungsoptionen (Näheres in und ) - mit einem Befehl wie dem folgenden gesetzt werden: setenv bootargs console=ttyS0,115200 rootwait panic=10 Der exakte Befehl zur Ausführung des vorher geladenen Codes hängt vom verwendeten Image-Format ab. Bei uImage/uInitrd lautet der Befehl: bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r} Bei nativen Linux-Image ist es: bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r} Beachten Sie: wenn Sie Standard-Linux-Images booten, ist es wichtig, dass das Initial-Ramdisk-Image nach dem Kernel und der DTB geladen wird, da U-Boot die filesize-Variable (Dateigröße) auf die Größe der letzten geladenen Datei setzt und der bootz-Befehl benötigt die Größe des Ramdisk-Images, um korrekt zu arbeiten. Beim Booten eines plattformspezifischen Kernels, also eines Kernels ohne Gerätebaum-Abbild (DTB), lassen Sie den ${fdt_addr_r}-Parameter einfach weg. Vorkonfiguriertes netboot-Tarball-Archiv &debian; stellt ein vorkonfiguriertes Tarball-Archiv (&armmp-netboot-tarball;) bereit, das Sie einfach auf Ihren TFTP-Server entpacken können; es enthält alle für das Netbooting benötigten Dateien. Außerdem ist ein Boot-Skript enthalten, das alle zum Laden des Installers erforderlichen Schritte automatisiert. Moderne U-Boot-Versionen haben eine TFTP-Autoboot-Funktion, die aktiv wird, wenn kein lokales boot-fähiges Speichermedium (MMC/SD-Karte, USB, IDE/SATA/SCSI) verfügbar ist; es lädt dann dieses Boot-Skript vom TFTP-Server. Voraussetzung für die Verwendung dieser Funktionalität ist, dass Sie einen DHCP-Server in Ihrem Netzwerk haben, der den Client mit der Adresse des TFTP-Servers versorgt. Möchten Sie die TFTP-Autoboot-Funktion von der U-Boot-Befehlszeile aus anstoßen, können Sie folgenden Befehl nutzen: run bootcmd_dhcp Um alternativ das Boot-Skript aus dem Tarball-Archiv händisch zu laden, können Sie auch diese Befehle am U-Boot-Prompt ausführen: setenv autoload no dhcp tftpboot ${scriptaddr} /debian-installer/armhf/tftpboot.scr source ${scriptaddr} Booten von USB-Stick mit UEFI &boot-installer-intro-usb.xml; Booten von USB-Stick in U-Boot Viele moderne Versionen von U-Boot haben USB-Unterstützung und erlauben das Booten von USB-Massenspeicher-Geräten wie z.B. USB-Sticks. Unglücklicherweise können sich die genauen Schritte, die dazu nötig sind, von Gerät zu Gerät ein wenig unterscheiden. In U-Boot v2014.10 wurde das grundlegende Handling für eine Kommandozeile sowie ein Rahmenwerk für automatisches Booten (autoboot) eingeführt. Dies erlaubt die Erzeugung generischer Boot-Images, die auf jedem System funktionieren, das dieses Rahmenwerk implementiert hat. Der &d-i; unterstützt die Installation von USB-Stick auf solchen Systemen, aber leider haben noch nicht alle Plattformen dieses Rahmenwerk übernommen. Um einen boot-fähigen USB-Stick zur Installation von &debian; zu erstellen, entpacken Sie das hd-media-Tarball-Archiv (Näheres in ) auf einen USB-Stick, der mit einem Dateisystem formatiert ist, welches von der U-Boot-Version auf Ihrem Gerät unterstützt wird. Bei neueren U-Boot-Versionen sollten FAT16, FAT32, ext2, ext3 und ext4 normalerweise funktionieren. Kopieren Sie dann auch die ISO-Image-Datei der ersten &debian;-Installations-CD oder -DVD auf den Stick. Das autoboot-Rahmenwerk in modernen U-Boot-Versionen funktioniert ähnlich wie die Optionen für die Bootreihenfolge in einem PC-Bios, d.h. auf verschiedenen möglichen Boot-Geräten wird der Reihe nach nach einem gültigen Boot-Image gesucht und das erste gefundene wird gestartet. Wenn kein Betriebssystem installiert ist, sollte das Starten des Systems mit eingestecktem USB-Stick den Installer booten. Sie können den USB-Boot-Prozess auch zu jeder Zeit vom U-Boot-Prompt aus anstoßen, indem Sie den run bootcmd_usb0-Befehl ausführen. Ein Problem, das beim Booten von einem USB-Stick bei Nutzung der seriellen Konsole auftreten könnte, ist eine nicht passende Konsolenbaudrate. Wenn die console-Variable in U-Boot definiert ist, wird das Boot-Skript des &d-i; diese automatisch an den Kernel weiterleiten, um das primäre Konsolengerät und - falls anwendbar - die Baudrate einzustellen. Unglücklicherweise variiert die Handhabung der console-Variable von Plattform zu Plattform - auf einigen Plattformen enthält die console-Variable die Baurate (wie in console=ttyS0,115200), auf anderen hingegen lediglich den Gerätenamen (z.B. console=ttyS0). In letzterem Fall kann es zu einer verstümmelten Konsolenausgabe kommen, wenn die Standard-Baudrate bei U-Boot und dem Kernel nicht übereinstimmt. Moderne U-Boot-Versionen verwenden oft eine Geschwindigkeit von 115200 Baud, während beim Kernel noch der alte traditionelle Wert von 9600 Baud voreingestellt ist. Falls dies passiert, sollten Sie die console-Variable händisch setzen, so dass Sie die korrekte Baudrate für Ihr System enthält, und dann den Installer mit run bootcmd_usb0 starten. Verwenden von vorbereiteten (pre-built) SD-Karten-Images mit dem Installer Für eine Reihe von Systemen bietet Debian SD-Karten-Images an, die sowohl U-Boot wie auch den &d-i; enthalten. Diese Images gibt es in zwei Varianten - eine für das Herunterladen der Software-Pakete über das Netzwerk (verfügbar unter &armmp-netboot-sd-img;) und die andere für Offline-Installationen ohne Internet-Verbindung, die stattdessen eine Debian-CD/DVD verwenden (unter &armmp-hd-media-sd-img; verfügbar). Um Speicherplatz und Bandbreite zu sparen, bestehen die Images aus zwei Teilen - einem System-abhängigen Teil namens firmware.<system-typ>.img.gz und einem System-unabhängigen Teil namens partition.img.gz. Um auf einem Linux-System aus diesen beiden Teilen ein vollständiges Image zu erzeugen, können Sie zcat wie folgt verwenden: zcat firmware.<system-typ>.img.gz partition.img.gz > complete_image.img Auf Windows-Systemen müssen Sie die beiden Teile zunächst separat dekomprimieren, was zum Beispiel mit 7-Zip erledigt werden kann, und dann durch Eingabe des folgenden Befehls in einem cmd.exe-Fenster wieder zusammenfügen: copy /b firmware.<system-typ>.img + partition.img complete_image.img Schreiben Sie das erzeugte Image auf eine SD-Karte, indem Sie z.B. auf einem Linux-System folgenden Befehl nutzen: cat complete_image.img > /dev/SD_KARTEN_GERÄT Nachdem Sie die SD-Karte in das Zielsystem eingesteckt und dieses eingeschaltet haben, wird der Installer von der SD-Karte geladen. Falls Sie die hd-media-Variante für eine Installation ohne Internet-Verbindung verwenden, müssen Sie dem Installer über ein separates Medium Zugriff auf die erste &debian;-CD/DVD ermöglichen; dies kann z.B. über ein CD/DVD-ISO-Image auf einem USB-Stick geschehen. Wenn Sie im Installer den Schritt für die Partionierung erreichen (lesen Sie dazu ), können Sie jegliche Partitionen auf der SD-Karte löschen oder ersetzen. Sobald der Installer einmal gestartet ist, läuft er komplett im Arbeitsspeicher des Systems und benötigt keinen Zugriff auf die SD-Karte mehr. Daher können Sie die vollständige SD-Karte zur Installation von &debian; benutzen. Der einfachste Weg, ein passendes Partitions-Layout auf der SD-Karte zu erstellen, ist die Nutzung der Geführten Partitionierung (Näheres hierzu in ).