NoWayOS
DE
GitHub
MenüSchließen

Bauen

Betrieb auf einem Raspberry Pi 5

Was Sie kaufen sollten, wie Sie die SD-Karte bauen und beschreiben, wie Sie das serielle Log des Boards lesen und prüfen und wie Sie Systeme unbeaufsichtigt auf dem Pi 5 laufen lassen oder die Benutzeroberfläche auf seinem HDMI-Bildschirm verfolgen.

Der Raspberry Pi 5 ist das Referenzboard von NoWayOS: günstig, überall erhältlich und das Board, auf dem die ersten Hardwaretests laufen. Ein System, das in QEMU besteht, wird auf dem Pi gegen dieselbe Expect-Datei geprüft, anhand des seriellen Logs des Boards.

Zwei Regeln für das Board. Schließen Sie nie einen 5-V-Seriell-Adapter an den UART des Pi an: Es ist ein 3,3-V-Port. Und programmieren Sie auf einem Entwicklungsboard nie den einmal programmierbaren Speicher (OTP) des Pi und aktivieren Sie dort nie Secure Boot: Beides ist unumkehrbar. make sdcard lehnt eine config.txt ab, die eines davon tun oder die Spannung des Boards ändern würde.

Was Sie brauchen

Teil Hinweise
Raspberry Pi 5 Entwickelt und getestet auf dem Board mit 16 GB. Jeder Befehl nennt das Board rpi5b_2gb: die seL4-Konfiguration für den Pi 5, die seine ersten 2 GB Arbeitsspeicher nutzt, von denen der Build seL4 knapp 1 GB gibt. Die Boards mit 2, 4 und 8 GB sollten daher nichts anderes brauchen, wurden aber noch nicht ausprobiert
Netzteil Das offizielle USB-C-Netzteil mit 5 V, 5 A oder ein gleichwertiges. Ein unterversorgter Pi 5 spielt verrückt, als hätte er einen Softwarefehler
microSD-Karte Für die Boot-Partition, die make sdcard baut
Raspberry Pi Debug Probe Ihr UART-Kabel passt an den 3-poligen Debug-Anschluss des Pi 5. Jeder 3,3-V-USB-zu-Seriell-Adapter mit dem passenden Kabel funktioniert ebenfalls
HDMI-Monitor, USB-Tastatur und -Maus Für die Benutzeroberfläche. Schließen Sie den Monitor vor dem Einschalten an: Die Firmware richtet den Bildschirm nur beim Booten ein. USB-Boot-Tastaturen und -Mäuse funktionieren, Hubs noch nicht

Die SD-Karte bauen

make sdcard BOARD=rpi5b_2gb SYSTEM=hello

Das schreibt die Boot-Partition der Karte nach build/rpi5b_2gb/hello/sdcard/: U-Boot, den Device Tree und die Overlays, config.txt, das seL4-Image loader.img, die Lizenzdateien und eine SHA256SUMS, um die Karte danach zu prüfen. U-Boot wird im Container aus dem Quellcode gebaut, reproduzierbar.

Die Karte beschreiben

Unter macOS

  1. Finden Sie die Karte mit diskutil list: Sie ist external, physical und hat die Größe der Karte. Der nächste Schritt löscht diesen gesamten Datenträger, prüfen Sie die Nummer also zweimal.
  2. Formatieren Sie sie mit der Bezeichnung PIBOOT:
diskutil eraseDisk FAT32 PIBOOT MBRFormat /dev/diskN
  1. Kopieren Sie die Dateien und prüfen Sie, dass jede unversehrt angekommen ist (das gibt nichts aus, wenn alle übereinstimmen):
cp -RX build/rpi5b_2gb/hello/sdcard/ /Volumes/PIBOOT/
dot_clean -m /Volumes/PIBOOT
(cd /Volumes/PIBOOT && shasum -a 256 -c SHA256SUMS | grep -v ': OK$')
  1. Werfen Sie sie mit diskutil eject /dev/diskN aus und stecken Sie sie in den Pi.

Unter Linux

Dieselben Schritte mit den Werkzeugen von Linux (die eigenen Karten des Projekts entstehen unter macOS):

  1. Finden Sie die Karte mit lsblk -p: ein Datenträger in der Größe der Karte, etwa /dev/sdX oder /dev/mmcblk0. Der nächste Schritt löscht diesen gesamten Datenträger, prüfen Sie den Namen also zweimal und hängen Sie alle seine Partitionen aus.
  2. Legen Sie eine FAT32-Partition mit der Bezeichnung PIBOOT an (mit installiertem dosfstools und parted):
sudo parted --script /dev/sdX mklabel msdos mkpart primary fat32 1MiB 100% set 1 lba on
sudo mkfs.vfat -F 32 -n PIBOOT /dev/sdX1
  1. Kopieren Sie die Dateien und prüfen Sie, dass jede unversehrt angekommen ist (das gibt nichts aus, wenn alle übereinstimmen):
sudo mount /dev/sdX1 /mnt
sudo cp -r build/rpi5b_2gb/hello/sdcard/. /mnt/
(cd /mnt && sha256sum -c SHA256SUMS | grep -v ': OK$')
sudo umount /mnt
  1. Stecken Sie sie in den Pi.

Die serielle Konsole anschließen

Stecken Sie die Debug Probe an den eigenen 3-poligen Debug-Anschluss des Pi 5, zwischen den HDMI-Ports, nicht an die GPIO-Pins. Sie läuft mit 115200 Baud, 8N1. Die Probe erscheint auf einem Mac als /dev/cu.usbmodem… und unter Linux als /dev/ttyACM0 oder ähnlich (Ihr Benutzer muss dazu in der Gruppe dialout sein).

Starten Sie die Aufzeichnung, bevor Sie den Pi einschalten, ein Boot pro Log:

mkdir -p build/rpi5b_2gb/hello
(stty 115200 raw -echo; cat) < /dev/cu.usbmodemXXXX | tee build/rpi5b_2gb/hello/serial.log

Halten Sie Einstellungen und Lesen in einem Befehl zusammen, wie hier: Unter macOS fällt ein zweites Öffnen des Ports auf 9600 Baud zurück. Unter Linux stellen Sie den Port mit stty -F /dev/ttyACM0 115200 raw -echo ein und lesen ihn mit cat /dev/ttyACM0. Beenden Sie nach der letzten erwarteten Zeile mit Ctrl-C.

Beim Einschalten zählt U-Boot drei Sekunden herunter und bootet dann das loader.img der Karte. Um stattdessen an seinem Prompt anzuhalten, tippen Sie während des Countdowns stopboot. (Nur dieses Wort hält es an, sodass das Rauschen, das eine nicht verbundene serielle Leitung auffängt, ein Gerät nie in U-Boot festhalten kann.)

Das Log prüfen

Prüfen Sie das Log des Boards gegen die Expect-Datei des Systems, nach denselben Regeln, nach denen die Ausgabe von QEMU geprüft wird:

make check-serial SYSTEM=hello LOG=build/rpi5b_2gb/hello/serial.log

Ergänzen Sie BOARD=rpi5b_2gb für ein System, das eine eigene Expect-Datei für den Pi hat.

Systeme unbeaufsichtigt ausführen

Mit angeschlossener Probe führt make pi-run eine Reihe von Systemen auf dem Board aus, ohne dass eine Karte umgesteckt werden muss und ohne dass jemand am Board sitzt. Führen Sie es direkt auf Ihrem Rechner aus, nicht im Container (auf einem Mac sieht die virtuelle Maschine von Podman keine seriellen USB-Geräte). Dort braucht es Python 3.11 oder neuer, nur mit der Standardbibliothek:

make pi-run PI_DEVICE=/dev/cu.usbmodemXXXX PI_SYSTEMS="hello ipc-demo isolation-test"

Für jedes System baut es das Image im Container, setzt das Board zurück, sendet das Image über die serielle Leitung und prüft, dass es unversehrt angekommen ist, schärft den Watchdog des Boards und startet es. Jedes Log wird beim Eintreffen geprüft, und der Watchdog setzt das Board für das nächste System zurück. Jeder Befehl, den es eintippt, wird als Echo zurückgesendet und geprüft, bevor er abgeschickt wird. Die Logs landen in build/rpi5b_2gb/pi-run/.

Die Benutzeroberfläche verfolgen

Ist der Monitor vor dem Einschalten angeschlossen, führt

make pi-run PI_DEVICE=/dev/cu.usbmodemXXXX PI_SYSTEMS=ui-demo PI_WATCHDOG=15

die gescriptete Sitzung der Benutzeroberfläche auf dem HDMI-Bildschirm aus und prüft einen Hash jedes Frames. Um ein System für einen Menschen zum Zuschauen laufen zu lassen, ohne Watchdog, verwenden Sie make pi-show PI_DEVICE=… SYSTEM=ui-demo; es läuft, bis das Board aus- und wieder eingeschaltet wird.

Wenn etwas fehlschlägt

Gehen Sie zum letzten Image zurück, das funktioniert hat, und prüfen Sie die serielle Leitung und die Boot-Kette erneut, bevor Sie mehr als eine Sache auf einmal ändern. Erscheint vor U-Boot gar nichts, prüfen Sie die Einstellung BOOT_UART des Bootloaders und enable_uart=1 in der config.txt der Karte, bevor Sie die Probe oder die Verkabelung verdächtigen.