Was ist ein Bootloader?
Der Bootloader befindet sich in der Regel zusammen mit dem Betriebssystem auf einem Laufwerk, von dem gebootet werden kann – etwa eine Micro-SD Karte oder bei PCs eher SSDs. Bis einschließlich zum Raspberry Pi 3 lag er in der Datei bootcode.bin auf der /boot Partition. Das BIOS/UEFI startet den Bootloader, der startet wiederum den Kernel und damit das Betriebssystem. Seit dem Raspberry Pi 4 gibt es dafür einen EEPROM – also ein eigener, dauerhafter aber beschreibbarer Speicher auf dem Pi selbst, die /boot Partition auf der Karte zu verwenden.
Bei bestimmten Problemen oder Funktionswünschen kann es helfen, den Bootloader zu aktualisieren. In den Veröffentlichungshinweisen (englisch) findet man u.a. neue Funktionen wie NVM – eine Schnittstelle, um SSDs besonders schnell per PCI-Express anzuschließen. Außerdem gab es Fehlerkorrekturen oder Leistungsverbesserungen, etwa zur Reduzierung der Startzeit.
So aktualisierst du den Bootloader und änderst die Startreihenfolge (falls gewünscht)
Falls du den Bootloader aktualisieren möchtest, macht es bei bereits bestehenden Installationen Sinn, die aktuelle Version einzusehen und zu notieren:
$ sudo rpi-eeprom-update
*** UPDATE AVAILABLE ***
BOOTLOADER: update available
CURRENT: Thu 29 Apr 16:11:25 UTC 2021 (1619712685)
LATEST: Tue 25 Jan 14:30:41 UTC 2022 (1643121041)
RELEASE: default (/lib/firmware/raspberrypi/bootloader/default)
Use raspi-config to change the release.
VL805_FW: Dedicated VL805 EEPROM
VL805: up to date
CURRENT: 000138a1
LATEST: 000138a1
Die aktuellste Version (05. Januar 2022) ist hier also etwa ein 3/4 Jahr neuer, als die installierte vom 29. April 2021. Sie wurde über den „Default“ Zweig bereitgestellt. Sollte es zu Problemen kommen, weißt du, welche Version zuvor funktioniert hat.
Bedenke, dass der Raspberry Pi Aktualisierungen in drei Kategorien aufteilt:
- Der default Zweig, früher critical ist standardmäßig eingestellt und enthält nur kritische Korrekturen. Neue Funktionen erfolgen mit Verzögerung, damit sie maximal stabil sind.
- latest ist die neue Bezeichnung für stable. Wie der Name vermuten lässt, landen dort Änderungen, die in beta getestet und als stabil empfunden wurden.
- Für verschiedene Funktionen wird es zukünftig spezifische Beta-Veröffentlichungen geben. Bis August 2023 existierte ein allgemeiner beta Zweig für Funktionen, die noch frisch und daher wenig getestet sind. Er ist für erfahrene Nutzer gedacht, die mit möglicherweise entstehenden Problemen umgehen können. Seit dem ist der Zweig ein alias für latest, damit deren Nutzer nicht ohne Aktualisierungen da stehen.
Änderungen durchlaufen diese drei Zweige der Reihe nach von unten nach oben. Welchen du verwendest, legt die Variable FIRMWARE_RELEASE_STATUS
in der Datei /etc/default/rpi-eeprom-update
fest:
$ cat /etc/default/rpi-eeprom-update
FIRMWARE_RELEASE_STATUS="default"
Um die aktuelle stabile Version zu erhalten, ersetze dort default durch stable. Anschließend kann die Installation möglicherweise vorhandener Aktualisierungen mit rpi-eeprom-update -a
gestartet werden:
sudo sed -i 's/default/stable/' /etc/default/rpi-eeprom-update
sudo rpi-eeprom-update -a
Variante 1: Per Raspberry Pi Imager (empfohlen)
Diese Variante könnt ihr nutzen, wenn noch kein Betriebssystem auf der Speicherkarte installiert ist bzw. ihr eine zweite Karte besitzt. Sie funktioniert auch direkt auf dem Pi. Dann muss das Raspberry Pi OS aber entweder auf einem USB-Speicher installiert sein, oder eine zweite Speicherkarte per USB-Kartenleser angeschlossen.
Unter Misc utility images findet man im Imager den Bootloader:
Ab dem Raspberry Pi Imager Version 1.7 stehen zusätzlich Beta-Versionen in einem eigenen Menü bereit:
Beta-Versionen sind entsprechend unausgereifter, die solltet ihr also nur installieren, wenn ihr euch dem bewusst seid. Nach der Wahl der Version kann man bequem die Bootreihenfolge einstellen:
Dadurch wird automatisch die neueste, stabile Version des Bootloaders auf eure Karte geschrieben. Das Standardverhalten ist SD Card Boot. Wenn ihr euer Betriebssystem auf eine SSD installieren möchtet, kann USB Boot Sinn machen.
Die Speicherkarte wird nach dem Schreiben in den Pi eingelegt und das Gerät gestartet. Wartet nun mindestens 10 Sekunden. In dieser Zeit kopiert er den neuen Bootloader von der Karte auf den internen Speicher (EEPROM). Der Prozess darf nicht unterbrochen werden! Ist das Update abgeschlossen, blinkt die grüne LED gleichmäßig in einer Endlosschleife. Ist ein Bildschirm per HDMI angeschlossen, färbt sich auch dieser komplett in grün. Im Fehlerfall wird das Bild rot bzw. die LED blinkt in einem anderen Muster.
Nun kann man den Pi ausschalten und das gewünschte Betriebssystem auf die Karte flashen – oder die Karte tauschen bzw. von USB booten, je nachdem.
Variante 2: Aus einem laufenden Raspberry Pi OS heraus den Bootloader aktualisieren
Mittlerweile werden neue Bootloader automatisch per apt (apt update && apt full-upgrade) verteilt. Ein Systemdienst namens rpi-eeprom-update kann neue Versionen einspielen. Der wird aber nicht tätig, da standardmäßig eingestellt ist, die ab Werk installierte Version zu behalten.
Um zu aktualisieren, navigieren wir in der raspi-config unter 6 Advanced Options > A7 Bootloader Version. Dort muss der Standard E2 Default auf E1 Latest gesetzt werden und die anschließende Nachfrage mit <Yes> bestätigen.
Der empfohlene Neustart sollte durchgeführt werden, erst danach ist die neue Version aktiv:
$ sudo rpi-eeprom-update
BOOTLOADER: up to date
CURRENT: Tue 25 Jan 14:30:41 UTC 2022 (1643121041)
LATEST: Tue 25 Jan 14:30:41 UTC 2022 (1643121041)
RELEASE: stable (/lib/firmware/raspberrypi/bootloader/stable)
Use raspi-config to change the release.
Über Latest/Critical erhaltet ihr auch zukünftig die aktuellste, stabile Veröffentlichung. Beta-Versionen sind nicht dabei. Dennoch kann es bei solchen Firmware-Updates vereinzelt zu Problemen kommen, dem muss man sich bewusst sein. Wenn alles läuft und nicht die neueste Version benötigt wird, ist es für Produktivsysteme möglicherweise sinnvoll, auf Default zu bleiben.
Hinweis zur Umbenennung: Die Zweige wurden mittlerweile umbenannt, Default heißt Critical und Latest nun Stable. Es gibt Links zu den alten Bezeichnungen. Im Konfigurationsmenü stehen noch die alten Bezeichnungen. Wenn ihr in der Raspi-Config „Default“ auswählt, zeigt rpi-eeprom-config daher „Critical“ an.
Kommt man auch wieder zurück?
Mit dem gezeigten Weg kannst du auch nachträglich zwischen den beiden Zweigen wechseln. Beachte aber, dass neue stabile Versionen einige Zeit später gebündelt in „Default“ bereitgestellt werden. Etwa zur Unterstützung neuer Hardware oder für kritische Fehlerkorrekturen. Das Paket rpi-eeprom erhält dann ein Update und die „Default“ Version verändert sich. Das sollte man im Hinterkopf behalten, da sich so die Standard-Version ändern kann.
Beispiel: Am 25.01.2022 wurde eine neue Version von rpi-eeprom veröffentlicht, die „Default“ auf die Version vom 25. Januar anhebt. Du wechselst am 24.01.2022 von Default auf Latest. Mehrere Tage später kommt es zu Problemen, du aktualisierst die APT-Pakete und möchtest zurück zu Default. Nun hast du eine andere Version als zuvor, weswegen ich am Anfang empfohlen habe, die exakte Version zu notieren.
Falls alles nichts hilft, kann man die notierte exakte Version im Dateisystem ermitteln und mit -f installieren, beispielsweise:
sudo rpi-eeprom-update -f /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2021-04-29.bin
So funktionieren automatische Aktualisierungen
Entsprechend der Vorgabe in /etc/default/rpi-eeprom-update
wird der Systemd-Dienst rpi-eeprom-update
prüfen, ob es neue Aktualisierungen gibt und diese einspielen:
$ systemctl status rpi-eeprom-update
● rpi-eeprom-update.service - Check for Raspberry Pi EEPROM updates
Loaded: loaded (/lib/systemd/system/rpi-eeprom-update.service; enabled; preset: enabled)
Active: active (exited) since Fri 2024-03-15 16:09:41 CET; 1 month 26 days ago
Process: 575 ExecStart=/usr/bin/rpi-eeprom-update -s -a (code=exited, status=0/SUCCESS)
Main PID: 575 (code=exited, status=0/SUCCESS)
CPU: 508ms
Mar 15 16:09:40 pi4 rpi-eeprom-update[575]: BOOTLOADER: up to date
Mar 15 16:09:40 pi4 rpi-eeprom-update[575]: CURRENT: Wed 11 Jan 17:40:52 UTC 2023 (1673458852)
Mar 15 16:09:40 pi4 rpi-eeprom-update[575]: LATEST: Wed 11 Jan 17:40:52 UTC 2023 (1673458852)
Mar 15 16:09:40 pi4 rpi-eeprom-update[575]: RELEASE: default (/lib/firmware/raspberrypi/bootloader-2711/default)
Mar 15 16:09:40 pi4 rpi-eeprom-update[575]: Use raspi-config to change the release.
Mar 15 16:09:40 pi4 rpi-eeprom-update[575]: VL805_FW: Dedicated VL805 EEPROM
Mar 15 16:09:40 pi4 rpi-eeprom-update[575]: VL805: up to date
Mar 15 16:09:40 pi4 rpi-eeprom-update[575]: CURRENT: 000138c0
Mar 15 16:09:40 pi4 rpi-eeprom-update[575]: LATEST: 000138c0
Mar 15 16:09:41 pi4 systemd[1]: Finished rpi-eeprom-update.service - Check for Raspberry Pi EEPROM updates.
Sollte dies nicht gewünscht sein, lässt er sich wie folgt deaktivieren:
sudo systemctl mask rpi-eeprom-update
Um später automatische Firmware-Aktualisierungen wieder zu aktivieren:
sudo systemctl unmask rpi-eeprom-update
Wie lassen sich Beta-Versionen installieren?
Wie im oberen Abschnitt erwähnt, wurde der allgemeine Beta-Zweig im August 2023 abgeschafft. Neue Funktionen sollen in separaten Zweigen bereitgestellt werden, um gezielt einzelne Funktionalitäten aktivieren zu können – statt ggf. mehrerer, die sich derzeit im Beta-Stadium befinden. Da diese Änderung recht frisch ist, gab es bisher noch keine neuen Beta-Veröffentlichungen.
Um neue Funktionen auszuprobieren, kannst du Beta-Versionen ausprobieren. Man sollte sich aber bewusst sein, dass diese weniger stabil sein können. Dazu öffnet man die Datei /etc/default/rpi-eeprom-update mit einem Texteditor und setzt FIRMWARE_RELEASE_STATUS=“critical“ auf beta und startet anschließend mit dem Schalter -a die Installation zur aktuellen Beta:
$ sudo rpi-eeprom-update -a
*** INSTALLING EEPROM UPDATES ***
BOOTLOADER: update available
CURRENT: Thu 29 Apr 16:11:25 UTC 2021 (1619712685)
LATEST: Fri 4 Feb 12:03:08 UTC 2022 (1643976188)
RELEASE: beta (/lib/firmware/raspberrypi/bootloader/beta)
Use raspi-config to change the release.
Wer eine bestimmte Version installieren möchte, sucht in /lib/firmware/raspberrypi/bootloader/beta nach deren Dateiname und übergibt den Pfad mit -f.
Bootreihenfolge in einem laufenden Raspberry Pi OS verändern
Hast du bereits ein installiertes Raspberry Pi OS und möchtest die Startreihenfolge verändern, funktioniert das am einfachsten über die raspi-config: Im Menü 6 Advanced Options > A6 > Boot Order gibt es die gleichen drei Einstellungen, wie zuvor im Imager gezeigt:
Wer sich nun fragt, was dabei technisch passiert: Ähnlich wie der Kernel besitzt auch der Bootloader bestimmte Konfigurationseigenschaften. Eine davon heißt BOOT_ORDER: Sie legt die Startreihenfolge fest. Es gibt mehrere mögliche (hexadezimale) Werte, die drei aus dem grafischen Dialog wären z.B.
- 0xf41 Erst die SD-Karte, dann USB (wiederholend)
- 0xf14 Erst USB, dann SD (wiederholend)
- 0xf21 Erst die SD-Karte, dann Netzwerk (wiederholend)
Über folgenden Befehl könnte man sie händisch setzen:
sudo -E rpi-eeprom-config --edit
Die Konfigurationsdatei wird im Standard-Editor geöffnet, dort wird BOOT_LOADER in der Kategorie [all] gesetzt. Beispielsweise wie folgt für erst USB, dann SD-Karte (B2)
[all]
BOOT_ORDER=0xf14
Den aktuellsten Bootloader braucht ihr dafür nicht zwingend. Gerade auf älteren Pis ist es aber empfehlenswert, da ein dort installierter, entsprechend älterer Bootloader z.B. das Starten von USB-Geräten noch nicht unterstützt. Möglicherweise enthalten ältere Versionen zudem Fehler, die Probleme bereiten.