Raspberry Pi OS (Pi 4 & 5): Bootreihenfolge mit rpi-eeprom-config ändern

Hier gibt's Anleitungen und Themen dazu.
Antworten
Benutzeravatar

Themenstarter
Outi
Administrator
Administrator
Beiträge: 484
Registriert: 13.02.2015, 22:24
RasPis: 10+
Kontaktdaten:

Raspberry Pi OS (Pi 4 & 5): Bootreihenfolge mit rpi-eeprom-config ändern

Beitrag von Outi »

History:
04.05.2024 - Erste Veröffentlichung



Hinweis:
Diese Anleitung/Information erhebt keinen Anspruch auf Vollständigkeit und kann Fehler enthalten und die Benutzung erfolgt auf eigene Gefahr.
Es wird keinerlei Haftung für Schäden und/oder Datenverluste übernommen.

Info:
Diese Anleitung setzt ein fertig konfiguriertes Raspberry Pi OS voraus.
Diese Konfiguration funktioniert nur auf der Pi 4 Serie (4B, 400, CM4 und dessen Varianten) und dem Pi 5.


Inhaltsverzeichnis:
(1) Vorwort
(2) System aktualisieren
(3) Bootloader prüfen/aktualisieren
(4) Bootreihenfolge ändern


(1) Vorwort

Wer ab und zu von einem anderen Medium booten will/muss, konnte das bisher entweder über die GUI (grafische Oberfläche) in den Einstellungen erledigen oder wer keine GUI nutze und das Terminal (also "headless") bevorzugt (z.B. in Serverumgebungen), nahm diese Einstellung einfach über die Konfiguration per sudo raspi-config vor.
Dies ist quasi die selbe Konfigurationsmöglichkeit wie unter der GUI, hier aber eben im Textmodus auf Kommandozeilenebene (Terminal).
Auch hier muss man sich dann durch die Menüs zum passenden Eintrag "durcharbeiten".

Hier geht es nun rein im Textmodus des Terminals weiter, das man per Login z.B. mit Putty oder den SSH Befehlen der jeweiligen Host-Betriebssystemen erreicht.

Es gibt seit einiger Zeit aber auch eine direkte Methode im Terminal, nämlich das bereits installierte Paket rpi-eeprom-update.
Damit können wir gezielt und direkt die Bootreihenfolge verändern.


(2) System aktualisieren

Doch bevor wir hier etwas ändern, sollten wir sicher gehen, dass das System auf aktuellem Stand läuft.
Hier hat sich folgende Befehlskombination bewährt:

Code: Alles auswählen

sudo apt update && sudo apt full-upgrade -y
Dieser Befehl aktualisiert nicht nur die Paketliste vom System, sondern aktualisiert auch gleich alle installierten Pakete und dessen Abhängigkeiten.
Wem das zu heikel ist, kann statt full-upgrade auch nur upgrade verwenden, dabei wird nicht alles auf neusten Stand gehoben (die Unterschiede der Update-/Upgrade findet man in den man pages oder grob auch in meiner Installationsanleitung vom Raspberry Pi OS).

Sollten hier sehr viele Updates/Upgrades durchgegangen oder sogar der Reboot vom System vorgeschlagen worden sein, holen wir den einfach nach:

Code: Alles auswählen

sudo reboot

(3) Bootloader prüfen/aktualisieren

Nach dem erneuten Einloggen im Terminal prüfen wir die Version des Bootloaders:

Code: Alles auswählen

vcgencmd bootloader_version
Dabei erscheint eine Ausgabe wie diese hier:

Code: Alles auswählen

pi@raspberrypi:~ $ vcgencmd bootloader_version
2024/04/20 11:53:30
version (hier steht eine lange kryptische Zeichenkombination) (release)
timestamp 1713610410
update-time 1714573472
capabilities 0x0000007f
Am Datum sehen wir, dass diese Version zum Zeitpunkt der Erstellung dieser Anleitung recht neu ist.
Dabei sehen wir aber noch nicht, ab das wirklich die neuste Version ist.
Dies erreichen wir nun mit dem eigentlichen Befehl:

Code: Alles auswählen

sudo rpi-eeprom-update
Dieser Befehl ändert noch nichts, sondern gibt ebenfalls einige Daten preis:

Code: Alles auswählen

BOOTLOADER: up to date
   CURRENT: Sa 20. Apr 10:53:30 UTC 2024 (1713610410)
    LATEST: Sa 20. Apr 10:53:30 UTC 2024 (1713610410)
   RELEASE: latest (/lib/firmware/raspberrypi/bootloader-2712/latest)
            Use raspi-config to change the release.
Bei meinem System ist also der Bootloader aktuell.
Am Eintrag RELEASE: latest sehen wir eine Option der Installationsquelle.
Die letzte Zeile der obigen Ausgabe zeigt gleich, wo man die Quelle ändern kann, nämlich über raspi-config.
Dort stehen zur Auswahl: Latest und Default
Da Latest öfter aktualisiert wird, würde ich diese Option bevorzugen.
Wer seltener am System Änderungen vornimmt und nichts vermisst und alles funktioniert, kann natürlich bei Default bleiben oder gar dahin wechseln.
Viele neue Optionen sind bei Latest dagegen schneller erhältlich.

Aber auch für diese Einstellung müssen wir nicht in raspi-config, denn auch hier können wir die Option quasi direkt ändern, indem wir die entsprechende Konfig-Datei anpassen (was anderes macht raspi-config auch nicht).

Dazu öffnen wir diese Datei:

Code: Alles auswählen

sudo nano /etc/default/rpi-eeprom-update
Darin befindet sich dann die aktuelle Einstellung:

Code: Alles auswählen

FIRMWARE_RELEASE_STATUS="latest"
Sollte bei der obigen Ausgabe statt BOOTLOADER: up to date eher sowas wie BOOTLOADER: **UPDATE AVAILABLE** stehen, dann kann das Update mit diesem Befehl durchgeführt werden:

Code: Alles auswählen

sudo rpi-eeprom-update -a
Weiter Infos und Befehle können per Option -h (für help) abgerufen werden.

Ist das Update durchgelaufen, sollte neu gestartet und dann neu eingeloggt werden:

Code: Alles auswählen

sudo reboot
Sollte kein Update verfügbar gewesen sein, zeigt der Befehl wieder die selbe Ausgabe wie ganz oben bei der letzten Ausgabe, wo wir den Befehl ohne Option zum Anzeigen des Status eingegeben haben.

Nach dem Reboot prüfen wir wieder die Version mit dem bereits oben genutzten Befehl:

Code: Alles auswählen

vcgencmd bootloader_version
Erscheint das gleiche Datum wie zuvor, gab es entweder kein Update oder es ist nicht durchgelaufen, verm. ersteres.
Nach einem erfolgreichen Update sollte eben ein neueres Datum ausgegeben werden.


(4) Bootreihenfolge ändern

Wenn wir nun sicher gehen können, dass der gewollte und konfigurierte Bootloader aktuell ist, machen wir uns an die eigentliche Konfiguration der Bootreihenfolge mit dem folgenden Befehl:

Code: Alles auswählen

sudo rpi-eeprom-config
Dieser Befehl gibt die momentane Bootreihenfolge aus, die in etwa so aussehen könnte:

Code: Alles auswählen

pi@raspberrypi:~ $ sudo rpi-eeprom-config
[all]
BOOT_UART=1
POWER_OFF_ON_HALT=0
BOOT_ORDER=0xf146
Wichtig ist nun zu wissen, dass die Bootreihenfolge in der letzten Zeile von rechts nach links gelesen und abgearbeitet wird !!

Standard ist normalerweise der Wert 0xf41, bei mir steht was anderes, da ich bereits an der Bootreihenfolge "herumgespielt" (und getestet) habe.

Der Standardwert 0xf41 bedeutet also:

Code: Alles auswählen

1 = Prüfe auf SD-Karte
4 = Prüfe auf USB-Geräte
f = Beginne von vorne
0 und x können ignoriert werden und dienen nur der internen Verarbeitung.
(In der Regel deuten die beiden Zeichen 0x am Anfang darauf hin, dass es sich um eine hexadezimale Zahlenangabe handelt.
0-9, a-f, dann wieder von vorne)

Hier die Liste der einzelnen Ziffern (aus der Tabelle der Foundation) / frei übersetzt / ohne Gewähr:

Code: Alles auswählen

0 = SD CARD DETECT / Prüfe auf SD-Karte und warte, bis SD-Kartenstatus eine Änderung erkannt hat (veraltet seit f (Restart))
1 = SD CARD / Prüfe auf SD-Karte (oder eMMC beim Compute Module 4)
2 = NETWORK / Netzwerkboot
3 = RPIBOOT / USB-Geräte-Boot
4 = USB-MSD / USB-Massenspeicher-Boot (also USB-Sticks oder Festplatten per Adapter)
5 = BCM-USB-MSD / USB-2.0-Boot vom USB-Typ-C-Sockel (CM4: USB-Type-A-Sockel beim CM4IO-Board), nicht am Pi 5 verfügbar
6 = NVME / nur CM4 und Pi 5: Booten von einer NVMe-SSD verbunden über den PCIe-Anschluss
7 = HTTP / Booten über HTTP per Ethernet, um den Raspberry Pi mit dem eingebetteten Raspberry Pi Imager zu starten
e = STOP / Stoppen und Fehlermuster anzeigen / Um diesen Zustand zu verlassen, ist ein Aus- und Wiedereinschalten erforderlich
f = RESTART / wieder von vorne beginnen (Schleife)
Bitte bachten, dass man hier nicht blind einfach irgendwelche Optionen eingibt, denn einige Parameter benötigen weitere Angaben, um zu funktionieren !!

Hier die die Originalseite für alle Infos: Externer Link Bootloader Konfiguration

Bei meinem Code 0xf146 bedeuten die Zeichen also folgende Bootreihenfolge:

Erst nach einem per PCIe angebundenen NVMe-Speicher suchen (6), dann nach einem USB Speicher (4) und zuletzt nach einer SD-Karte (1).
Sind alle drei Funktionen nicht in bootbarerer Form vorhanden, gehe von vorne wieder alle angegebenen Methoden durch (f).

Um nun diese Reihenfolge zu ändern, geben wir den folgenden Befehl ein:

Code: Alles auswählen

sudo -E rpi-eeprom-config --edit
Dadurch wird die Konfigurationsdatei boot.conf normalerweise mit dem Editor nano direkt geöffnet:

Code: Alles auswählen

[all]
BOOT_UART=1
POWER_OFF_ON_HALT=0
BOOT_ORDER=0xf146
Bei mir ist das diese Ausgabe, die bei jedem anders sein kann (standardmäßig letzte Zeile BOOT_ORDER=0xf41).

Verlässt man den Editor (nano per <STRG><X>), wird der Inhalt an die entsprechende Konfiguration weiter gegeben und aktualisiert, auch wenn nichts geändert wurde.

Es folgt dann die gewünschte Anpassung und eine längere Ausgabe mit mehreren Informationen.
Ganz am Ende steht dann (bei Erfolg) in der letzten Zeile: UPDATE SUCCESSFUL

Danach kann die neue Konfiguration mit einem Reboot getestet/genutzt werden.

Sollte hier etwas schief gelaufen sein, empfiehlt die vorher genannte Ausgabe Folgendes:

Code: Alles auswählen

If a problem occurs then the Raspberry Pi Imager may be used to create a
bootloader rescue SD card image which restores the default bootloader image.

Frei übersetzt:

Wenn ein Problem auftritt, kann der Raspberry Pi Imager verwendet werden, um ein
Bootloader-Rettungs-SD-Karten-Image zu erstellen, welches das Standard-Bootloader-Image wiederherstellt.
Viel Erfolg.


Fortsetzungen, Korrekturen, Änderungen möglich ....

Copyright © 2024 by RasPiFun.de
;) Gruß Outi :D
Antworten