Unix

Leben mit einem Betriebssystem

29. Mar 2026

U-Boot Gefrickel

Das U-Boot, also der Bootloader für den RaspBerryPi 5 mit OpenBSD, ist ja eine feine Sache und funktioniert auch. Allerdings muss für den Einsatz von OpenBSD ein U-Boot-Parameter geändert werden, was nur mit einer seriellen Verbindung zwischen dem RaspberryPi und einem zweiten Rechner möglich ist.

Wenn ohnehin gerade frisch installiert wird, ist das natürlich kein Problem: Der Raspi ist dann ohnehin geöffnet und der Stecker für den seriellen Anschluss einigermassen zugänglich.

Ich habe bisher 3 Raspi 5 auf diese Art und Weise installiert, kein Problem. Trotzdem habe ich überlegt, wie ich die serielle Verbindung umgehen kann. Ich habs tatsächlich hinbekommen, aber es war ein ziemliches Gefrickel - allerdings Software-Gefrickel. Das Hardware-Gefrickel konnte ich damit umgehen.

Was habe ich gemacht? Hier im Stenogram-Stil die Schritte:

  • Mit dd if=/dev/sd1c of=obsd-rpi5.img bs=1m die SD-Karte eines laufenden OpenBSD in eine Datei geschrieben.

  • Mit dd if=obsd-rpi5.img of=/dev/sd2c bs=1m das Image auf eine neue SD-Karte geschrieben.

  • Damit habe ich jetzt eine bootfähige SD-Karte mit einem bereits modifizierten U-Boot. Die entsprechende Datei auf der Karte ist die uboot.env.

  • Die SD-Karte wurde nun an einem anderen Rechner gemountet, idealerweise einem mit OpenBSD. Dort gibt es unter /etc eine Datei boot.conf. Die habe ich erstellt und dort eingetragen, dass ins HDMI, also in einen Bildschirm gebootet wird. Die Datei enthält bis jetzt nur die Zeile set tty fb0. Dies wird jetzt erweitert durch boot bsd.rd, natürlich in einer neuen Zeile.

  • Nun kommt die neue SD-Karte in den Slot des RaspberryPi 5 und wird gebootet. Der Rechner startet, das U-Boot lädt OpenBSD, das geht sofort auf den Bildschirm und landet dann im Installations-Menü von OpenBSD. Je nach Bedarf kann jetzt ein Update oder eine Neuinstallation gestartet werden. Ich nutze die SD-Karte fast immer nur als Root-Partition und installiere den Rest des Systems auf einer NVME, eine der grössten Errungenschaften des RPI5.

  • Wichtig! Nach abgeschlossener Installaion nicht sofort neu Booten, sondern eine Shell aurfufen. Das neu installierte System ist noch unter /mnt gemountet, also ins Verzeichnis /mnt/etc wechseln. Jetzt muss der Eintrag boot bsd.rd aus der boot.conf entfernt werden. Am einfachsten durch Überschreiben mit echo "set tty fb0" > boot.conf

  • Nun mit exit zurück ins Installations-Menü und von dort aus neu gebootet. Der Rechner wird jetzt mit dem neuen OpenBSD starten.

  • Die Geschichte ist aber damit noch nicht fertig. Das System hat jetzt natürlich alle Einstellungen des Muttersystems, beispielsweise auch dessen MAC-Adresse, den hostname und was sonst noch individuell konfiguriert wurde. Das muss alles angepasst werden, eventuell brauchts auch eine neue MAC-Adresse. Das ist aber alles nicht wirklich schwierig, macht jedoch ein wenig Arbeit.

Erspart habe ich mir aber eventuell das Ausbauen der Raspi-Platine aus dem Gehäuse, vielleicht die Anschaffung eines debug uart Kabels, den Aus- und Wiedereinbau der NVME-Platine und und und. Die Zugänglichkeit des debug uart ist beim Raspi leider nicht sehr gut gelöst.

Raspi5 Debug Uart

16. Jan 2026

U-Boot startet OpenBSD nicht

Nachdem es gelungen war, OpenBSD auf dem RaspberryPi 5 zu installieren, trat ein weiteres Problem auf: Das U-Boot.

Während ich bis zum RaspberryPi 4 OpenBSD über die EDK-Firmware booten konnte, funktioniert das beim RaspberryPi 5 nicht damit. Statt dessen werden die Systeme mit dem U-Boot gestartet, einem universellen Bootloader für Arm64-Systeme. Das U-Boot richtet beim Start die Hardware-Komponenten ein und startet danach das Betriebssystem.

Nun trat bei der Kombination Raspi5/OpenBSD ein merkwürdiges Verhalten auf: Die Installation wurde über die serielle Schnittstelle durchgeführt, anschliessend und für den Alltagsbetrieb hat die Datei /etc/boot.conf mit dem Eintrag set tty fb0 die Ausgabe auf HDMI, also den Monitor, gesetzt.

Und nun passierte folgendes: War der Raspberry 5 noch seriell mit dem Installationsrechner verbunden und war diese Verbindung noch aktiv, klappte alles wie am Schnürchen: Das U-Boot startete den Raspi, zeigt dabei kurz sein Logo oben rechts auf dem Monitor und startete dann wie gewünscht das System, also OpenBSD.

Bestand diese serielle Verbindung aber nicht mehr, startete zwar das U-Boot, aber das Logo blieb dauerhauft sichtbar und OpenBSD wurde nicht geladen. Dann musste ich die serielle Verbindung wieder herstellen und konnte dann im Terminal-Programm, z.B. cu, sehen, das es nur bis zum U-Boot-Prompt gelaufen war. Jetzt musste boot eingetippt werden, und dann erst wurde OpenBSD gestartet. Das war natürlich Mist.

Die Lösung kam, nicht unerwartet, über die OpenBSD-Arm-Mailing-Liste. Im U-Boot muss die Umgebungsvariable bootdelay auf -2 gesetzt werden. Das erfolgt am U-Boot-Prompt über die serielle Verbindung mit zwei Befehlen:

setenv bootdelay -2

saveenv

Also die Variablesetzen und dann abspeichern. Damit läuft (bisher) jeder Gerätestart sauber bis zum OpenBSD-Prompt durch. Das Leben kann so einfach sein!

Das U-Boot

Ach ja, eines noch: Beim Raspberry 5 muss die Debug-Schnittstelle benutzt werden, mit der GPIO-Schnittstelle gibts keine Verbindung. Muss man auch wissen.

 ·   ·  OpenBSD  Raspberry5  U-Boot