Bootloader

Ein Bootloader (englische Aussprache [], von der verkürzten Form des ursprünglichen Wortes bootstrap loader), auch Startprogramm genannt, ist eine spezielle Software, die gewöhnlich durch die System-Firmware (z. B. dem BIOS, Open Firmware oder UEFI) eines Rechners von einem startfähigen Medium geladen und anschließend ausgeführt wird. Der Bootloader lädt dann weitere Teile des Betriebssystems, gewöhnlich einen Kernel. Daher ist auch oft vom Bootcode die Rede, dem ersten Programm (Maschinencode), das nach der unveränderlichen Firmware von einem wechselbaren veränderlichen Datenspeicher geladen wird. Der Vorgang selbst heißt Booten (auf Deutsch auch Starten) eines Rechners.

Grundlagen 
Der englische Begriff „“ bezieht sich ursprünglich auf die Schlaufe, die sich an der Hinterseite eines Stiefels befindet, um das Anziehen des Stiefels zu erleichtern. Der Prozess des Bootens (ein Programm auf einem Rechner laufen zu lassen, auf dem noch kein Betriebssystem läuft) erinnert teilweise an das Bemühen, sich an der eigenen Stiefelschlaufe aus dem Morast zu ziehen.

Ein erster „“ befindet sich in der Hardware selbst. Meist handelt es sich um einen Boot-ROM, der die für das Starten grundlegende Hardwarekomponenten initialisiert, ein Startprogramm sucht und, wenn eines gefunden wird, ausführt. Wo sich der Bootloader auf dem veränderlichen Datenspeicher zu befinden hat und wie er geladen wird ist je nach Rechnerarchitektur und Plattform unterschiedlich. Auf moderneren Architekturen liegt er meist als Datei auf einem von der Firmware unterstützten Dateisystem auf einem unterstützten bootfähigen Medium, etwa einer bestimmten Partition auf der Festplatte, und wird davon direkt geladen und ausgeführt. Das ist beispielsweise bei Open Firmware und bei UEFI der Fall, wobei die verwendeten Partitionstabellen und Dateisysteme unterschiedlich sein können. Auch der Bootloader selbst muss in einem bestimmten ausführbaren Dateiformat vorliegen. Das kann einerseits der Prozessorarchitektur und im Besonderen deren Befehlssatz geschuldet sein, wie z. B. PE/COFF bei UEFI, oder die Firmware implementiert ein Architektur-übergreifendes Zwischencode-Format wie z. B. Open Firmware mit Forth FCODE. Einige ältere Architekturen laden den Bootloader aus einem vordefinierten Block des startfähigen Mediums, der daher auch als Bootblock oder, gängiger, Bootsektor bezeichnet wird. Bei IBM-PC-kompatiblen Computern mit BIOS befindet sich dieser immer im ersten Block, Block 0, der auf partitionierten Datenträgern wie Festplatten gängigerweise einen Master Boot Record (MBR) sowohl als Startprogramm als auch als Partitionstabelle enthält. Auf Disketten wird in gleicher Weise Block 0 geladen und ausgeführt, allerdings findet sich dort im Normalfall keine Partitionstabelle, sondern ein Volume Boot Record (VBR). 

Auch im Bereich der eingebetteten Systeme spricht man von Bootloadern. Dort kann der Bootloader oft nicht nachgeladen werden, sondern befindet sich im nichtflüchtigen Speicher des Steuergeräts. Er beinhaltet Grundroutinen der Initialisierung und oft Kommunikationsprotokolle, um den Austausch der Anwendungsprogramme zu ermöglichen.

Beim Raspberry Pi ist aus kostengründen nur ein minimales Boot-ROM direkt im SoC untergebracht. Diese erste Firmware-Stufe kann nichts anderes als auf die SD-Karte zuzugreifen und dort von einer FAT-Paritition die Datei bootcode.bin zu laden und auszuführen. Im Fall eines Linux-Systems initialisiert diese zweite Firmware-Stufe die restliche Hardware und führt im Anschluss eine dritte Stufe aus der Datei loader.bin aus. Dieser  wiederum lädt nun die Firmware für CPU und GPU in den RAM. Erst danach ist der Einplatinencomputer bereit, um den Linux-Kernel zu laden, wobei die Firmware-Konfiguration aus Datei config.txt und die Kernel-Parameter aus Datei cmdline.txt angewendet werden.

Als Bootmanager wird ein auf einem Betriebssystem installierbares Dienstprogramm bezeichnet, das einen eigenen Bootloader enthält und erweiterte Konfigurationsmöglichkeiten bietet.

Mehrstufige Bootloader 
Ist ein Bootloader in mehrere auf einander aufbauende Stufen unterteilt, so wird er als mehrstufiger Bootloader () bezeichnet. Diese Unterteilung in Stufen wird z. B. dann gemacht, wenn der Programmcode des Bootloaders nicht im Bootsektor Platz findet; an dieser Stelle wird daher nur die erste Stufe geladen und ausgeführt, die dann die zweite Stufe, von der die erste Stufe nur die Länge, die Block-Nummer und die Nummer des Mediums kennt, geladen und ausgeführt wird. Die zweite Stufe kann nun mit dem konkreten Dateisystem des Mediums umgehen und lädt anhand eines Dateinamens die dritte Stufe. Die dritte Stufe ist nun der eigentliche Bootloader und lädt eine Konfigurationsdatei, die z. B. ein Auswahlmenü enthält. Ein Menüpunkt könnte die Anweisung beinhalten, einen Bootloader einer anderen Partition zu laden.

Dieser mehrstufige Aufbau hat mehrere Vorteile: So kann im oben beschriebenen Fall die Datei des eigentlichen Bootloaders (Stufe 3) beliebig verändert oder auch physisch verschoben werden, da die zweite Stufe mit dem Dateisystem umgehen kann und die dritte Stufe anhand des Dateinamens finden kann. Außerdem unterliegt ein solcher Bootloader nicht den Beschränkungen der Länge eines Bootblocks.

Chain-Loader 
Es ist auch möglich, dass mehrere Bootloader sich – wie in einer [Befehls-]Kette (englisch ) – nacheinander aufrufen. Solche Aufrufe – meist über mehrere Partitionen hinweg – wird auch Chain-Loading oder Chainloading (englisch ) genannt. Hierbei kann zuerst ein Bootloader geladen werden, der z. B. ein Bootmenü zur Betriebssystem-Auswahl darstellt, und anschließend je nach Auswahl in diesem Menü der entsprechende (betriebssystemspezifische) Bootloader. So lassen sich auch mehrere, unterschiedliche Betriebssysteme in einem sogenannten Multi-Boot-System auf einem Rechner nebeneinander betreiben.

Bootloader mit Zusatzfunktion 
Manche Bootloader sind gar keine Bootloader mit dem alleinigen Zweck, ein Betriebssystem zu starten. Beispiele:
 Bootloader, die lediglich anzeigen sollen, dass ein eingelegtes Medium nicht startfähig ist, z. B. bei Disketten die Textausgabe „“ (MS-DOS 5.0, FAT12/16)
 Bootloader, die auf erkannten Datenspeichern weitere Bootloader erkennen und diese starten. Zu Zeiten von MS-DOS gab es einige Formatierungsprogramme für Disketten, die eine Auswahl eines zu startenden anderen per BIOS ansprechbaren Geräts erlaubten. So konnte man z. B. mit FDFORMAT oder VGA-COPY/386 einen Bootsektor auf Disketten schreiben, der wahlweise oder automatisch von der Festplatte starten konnte. Auch ist dies z. B. bei Windows-Installations-CDs der Fall: Wenn auf einer erkannten Festplatte (oder SSD) ein bereits installiertes Betriebssystem erkannt wird, booten diese nur dann von CD, wenn eine beliebige Taste gedrückt wird, ansonsten wird von der lokalen Festplatte gebootet. So kann das Installationsprogramm nach erfolgreicher Installation den Rechner sofort neustarten. Das Booten erfolgt zwar wieder von CD, aber nachdem nun keine Taste gedrückt wird, ruft sich das Installationsprogramm nicht erneut selbst auf, sondern übergibt die Kontrolle an die neue Installation.
 Bootloader, die gleich ein Anwendungsprogramm starten. Einige Programme, beispielsweise Memtest86, können direkt und ohne Dateisystem von einer Diskette gestartet werden. In den 1980er Jahren gab es bei IBM-kompatiblen PCs sogenannte , meist Computerspiele, die direkt und ohne Betriebssystem von der Diskette starteten.
 Bootloader, die fehlende oder falsche Funktionen des BIOS bei PC-kompatiblen Rechnern in Software (statt in Firmware) abändern. Das wurde früher benutzt, um BIOS-Funktionen zu erweitern, damit der Speicher von Festplatten mit mehr als 512 MiB, 8 GiB, 32 GiB oder 128 GiB vollständig erreichbar ist, wie z. B. EZ-Drive oder OnTrack Disk Manager.
 Auch Bootviren sind Bootloader, und in dieser speziellen Form Computerviren, die schon beim Rechner-Start aktiviert werden.
 Bootmanager sind Bootloader, die z. B. auf einem bestimmten Betriebssystem als Dienstprogramm installiert werden können. Sie bieten meist gegenüber dem vom Betriebssystem bereitgestellten Bootloader erweiterte Konfigurationsmöglichkeiten, etwa ein Bootmenü für Multi-Boot-Konfigurationen. Beispiele: GRUB auf IBM-kompatiblen PCs mit BIOS oder UEFI (GRUB2 auch auf weiteren Architekturen und Plattformen, etwa Open Firmware auf PowerPC), rEFIt und rEFInd auf x86-UEFI-PCs.
 Bootloader, die eine andere Firmware laden. So kann beispielsweise Tianocore EDK2 (UEFI) von einem, auch wechselbaren, Datenspeicher auf einem PC mit BIOS gestartet werden, welches anschließend ein modernes Betriebssystem, das UEFI voraussetzt, starten kann. Ebenso kann z. B. Open Firmware oder Coreboot per Bootloader gestartet werden.

Liste von Bootloadern

Einzelnachweise