CM4 von SSD-Laufwerk booten! Trennen Sie bei industriellen Anwendungen den Systembereich vom Datenbereich.

Einleitung.

Der Raspberry Pi 5 (im Folgenden Pi 5) verfügt über einen PCIe-Anschluss an der Haupteinheit, so dass NVMe-verbundene SSD-Laufwerke wie ein Standard-PC verwendet werden können.
Tatsächlich ist die Verwendung von PCIe bereits seit dem Raspberry Pi 4 (im Folgenden Pi 4) möglich, allerdings setzt dies eine Erweiterungs-HAT voraus. Das Compute Module 4 (im Folgenden CM4) ist dem Pi 4 ähnlich.

Dieser Abschnitt zeigt, wie Sie ein NVMe-verbundenes SSD-Laufwerk in den industriellen Raspi PL-R4 einbauen und es als Boot-Laufwerk behandeln.

Vorteile der Aktivierung von SSD-Laufwerken

Für industrielle Raspi, bei denen Robustheit wichtig ist, wird es auch notwendig sein, das Dateisystem in ROM zu konvertieren, um eine Systembeschädigung im Falle einer unerwarteten Stromabschaltung zu vermeiden.
ROM steht für Read Only Memory.

Bei einem typischen Raspberry Pi ist das Betriebssystem grundsätzlich auf einer microSD-Karte untergebracht, was es schwierig macht, es vom Datenbereich zu trennen.

Der für industrielle Anwendungen verwendete CM4 basiert auf eMMC-Boot. Da auch eine unbenutzte microSD-Karte verwendet werden kann, besteht der Vorteil darin, dass die microSD-Karte als separater Datenbereich genutzt werden kann, selbst wenn das Dateisystem in der eMMC in ROM umgewandelt wird.

Auch wenn eMMC schneller ist als eine microSD-Karte, kann es nicht mit einem SSD-Laufwerk mithalten. Wenn Sie eine schnellere Verarbeitung benötigen, können Sie das SSD-Laufwerk anstelle des eMMC-Laufwerks als Boot-Laufwerk verwenden, und Sie können die microSD-Karte auf dieselbe Weise als separaten Bereich nutzen.

Ein weiterer Nachteil ist, dass microSD-Karten auch eher beschädigt werden können. eMMC- und SSD-Laufwerke sind auch in dieser Hinsicht überlegen. Außerdem ist der Vorteil des Bootens auf einem SSD-Laufwerk aufgrund seiner höheren Geschwindigkeit erheblich.

Der verwendete industrielle Raspi PL-R4 ist, so konzipiert, dass ein NVMe-verbundenes SSD-Laufwerk in die Haupteinheit eingebaut werden kann. Der PL-R4 ist so konstruiert, dass ein NVMe-verbundenes SSD-Laufwerk in die Haupteinheit eingebaut werden kann.
Bitte beachten Sie die folgende Anleitung, da sie ein wenig kompliziert ist.

Bearbeiten und Schreiben des Bootloaders zum Booten von SSDs

Der CM4 Bootloader kann nicht eigenständig umgeschrieben werden, wie es beim Pi 4 der Fall ist.

Bereiten Sie einen handelsüblichen Pi 4 vor, getrennt vom Hauptteil des industriellen Raspi „PL-R4“, der den CM4 enthält.
(Es kann auch ein anderes PL-R4-Hauptgerät verwendet werden, aber dieses Mal wird der Pi 4 verwendet. Erstellen und verwenden Sie die Software ‚rpiboot‘ zum Schreiben aus dem Quellcode.

Der zum Schreiben verwendete Pi 4 war so voreingestellt, dass er SSH-Verbindungen und Fernsteuerung über VNC zulässt.

Der andere Grund, warum Sie ein USB-Kabel benötigen, um CM4 zu schreiben, ist, dass Sie ein USB-Kabel verwenden müssen, um den Schreibanschluss mit dem Pi 4 zu verbinden und den Bootloader an den Pi 4 zu senden.

Was Sie brauchen:

  • PL-R4 Hauptgerät
  • Pi 4 Satz
  • USB Typ-C zu Typ-A Kabel
  • rpiboot‘ aus dem Quellcode erstellt.
  • microHDMI-Kabel
  • anzeigen

Beachten Sie, dass das verwendete Kabel etwas speziell ist, da die CM4-Seite eine USB-C-Steckerform hat und der Pi 4 einen USB-A-Stecker hat.
Suchen Sie nach ‚USB-C zu A‘, um das entsprechende Produkt zu finden.

Beispiel für ein USB-C zu A Kabel
Beispiel für ein USB-C zu A Kabel
Links: Pi 4 (USB Typ-A), Rechts: PL-R4 (USB-Typ-C)

CM4 kann das EEPROM nicht selbständig aktualisieren.

rpi-eeprom-updateAuf einem typischen Pi 4 kann der Befehl verwendet werden.
Auf dem CM4 kann er jedoch nicht ausgeführt werden.

sudo rpi-eeprom-update
rpi-eeprom-update is not enabled by default on CM4.
The recommended method for flashing the EEPROM is rpiboot.
See: https://github.com/raspberrypi/usbboot/blob/master/Readme.md
Run with -h for more information.

Es ist zwar etwas umständlich, aber es macht EEPROM-Fehler weniger wahrscheinlich.

Von diesem Zeitpunkt an wird sie auf der Seite des Pi 4 ausgeführt, die separat vorbereitet wird.

Bearbeiten und Ersetzen des Bootloaders (Bootloader)

sudo rpi-eeprom-configWenn Sie auf ein NVMe-verbundenes SSD-Laufwerk umsteigen möchten, können Sie den Befehl für den kommerziellen Pi 5 usw. verwenden. Der CM4 ist im Grunde derselbe, aber Sie müssen den gesamten neu geschriebenen Bootloader ersetzen.

Die Software ‚rpiboot‘ wird verwendet, um Dateien an den CM4 zu senden. Die Dateien werden physisch an den CM4 gesendet, der über ein USB-Kabel angeschlossen ist.

Der Ablauf des Verfahrens ist wie folgt.

Ein separat vorbereiteter Pi 4 wird mit der Option zum Booten vom SSD-Laufwerk für eine bestimmte Version des Bootloaders wieder zusammengesetzt.
Der resultierende Bootloader kann mit der Software „rpiboot“ auf den CM4 geschrieben und ersetzt werden, was dasselbe ist wie das Anhängen der Option.

Bootloader Version

Vor dem Start habe ich die Version auf der PL-R4 Seite überprüft, sie lautet 2023-01-11. Der Dateiname lautet „pieprom-2023-01-11.bin“.

vcgencmd bootloader_version
2023/01/11 17:40:52
version 8ba17717fbcedd4c3b6d4bce7e50c7af4155cba9 (release)
timestamp 1673458852
update-time 0
capabilities 0x0000007f


In diesem Fall wurde die zum Zeitpunkt des Schreibens aktuellste „pieprom-2024-10-21.bin“ verwendet, bei stable und latest war es „pieprom-2024-10-21.bin“. Bitte lesen Sie weiter unten und ersetzen Sie das Jahr, den Monat und das Datum, falls die verwendeten Dateien unterschiedlich sind.

Überprüfen Sie die Update-Historie der einzelnen Firmware-Dateien und wählen Sie die gewünschte Version aus.

rpi-eeprom: h ttps://github.com/raspberrypi/rpi-eeprom/blob/master/releases.md

Verwendung von rpiboot

Das rpiboot wird vorbereitet, indem es aus dem Quellcode erstellt wird, wie von der offiziellen Seite empfohlen.
git clone wie folgt. Arbeitet im Home-Verzeichnis.

sudo apt install git libusb-1.0-0-dev pkg-config build-essential
git clone --recurse-submodules --shallow-submodules --depth=1 https://github.com/raspberrypi/usbboot
cd usbboot
make
cd recovery

/usbboot/recovaryWir werden nun innerhalb von .

Standort der Firmware.

Nachdem Sie den git clone ausgeführt hatten, wurden die Firmware-Dateien in das folgende Verzeichnis auf dem Pi 4 (bookworm) extrahiert.

/lib/firmware/raspberrypi/bootloader-2711/stable
/lib/firmware/raspberrypi/bootloader-2711/latest
/lib/firmware/raspberrypi/bootloader-2711/default

bootloader-2711bootloader-2712Offenbar ist die Verzeichnisstruktur seit bookwrom in und aufgeteilt worden. 2712 ist für Pi 5. CM4 ist aus 2711 zu wählen.

/lib/firmware/raspberrypi/bootloader/*Der Standort ist: in Bullseye.

Extrahieren Sie die conf-Datei aus dem Bootloader und hängen Sie sie an.

Der erste Schritt besteht darin, die Konfigurationsdatei aus dem Bootloader zu extrahieren.

rpi-eeprom-config /lib/firmware/raspberrypi/bootloader-2711/latest/pieeprom-2024-10-21.bin -o boot.conf

Dadurch wird die ursprünglich leere boot.conf im Verzeichnis recovary überschrieben. Bearbeiten Sie dies.

sudo nano boot.conf

BOOT_ORDER=0xf16Fügen Sie , hinzu, um die Boot-Reihenfolge (Boot Order) festzulegen.

[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
BOOT_ORDER=0xf16

BOOT_ORDER=0xf461In Pi 5 wurde dies z.B. eingestellt. Die Reihenfolge der Aktivierung ist im numerischen Teil von rechts nach links priorisiert.

Normalerweise ist 1 eine microSD-Karte, 4 ein über USB angeschlossener Speicher und 6 ein über NMVe angeschlossenes SSD-Laufwerk.
BOOT_ORDER=0xf16Diese Zeit stellt die Boot-Reihenfolge NVMe → microSD-Karte dar.


Weitere Informationen finden Sie in der offiziellen Dokumentation. URL: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#boot_order-fields

256 Export von Hash-Werten.

Verwenden Sie den Befehl sha256sum, um den Hash-Wert von pieprom.bin als .sig-Datei auszugeben.

sha256sum pieeprom.bin | awk '{print $1}' > pieeprom.sig

Um die Konsistenz zu überprüfen.

Exportieren nach pieprom.bin

Schreiben Sie schließlich auf.
Schreiben Sie pieprom-2024-10-21.bin als pieprom.bin aus, einschließlich der boot.conf, die Sie gerade angehängt haben.

rpi-eeprom-config -c boot.conf -o pieeprom.bin /lib/firmware/raspberrypi/bootloader-2711/default/pieeprom-2024-10-21.bin

Damit ist die Zubereitung abgeschlossen.

Führen Sie rpiboot aus, um in das EEPROM zu schreiben

Führen Sie schließlich rpiboot aus, um den Bootloader in das EEPROM zu schreiben.
Legen Sie ein USB-Kabel, eine Pinzette, ein Display und ein HDMI-Kabel bereit.

Bevor Sie den Befehl ausführen, schließen Sie den PL-R4 mit einem HDMI-Kabel an den Bildschirm an. (Der PL-R4 selbst ist nicht eingeschaltet)

cd usbboot/recovary
sudo ../rpiboot -d .

Nach der Ausführung hört das Terminal auf, die folgende Warnung anzuzeigen.
Schließen Sie nun das USB-Kabel an den PL-R4 an, der neu beschrieben werden soll.

Der **PL-R4 benötigt keine Stromversorgung. Schließen Sie ihn einfach mit einem USB-Kabel an den Pi4 an.

Kabel angeschlossen an USB Typ-C auf der Rückseite des PL-R4 Hauptgeräts
sudo ../rpiboot -d .
RPIBOOT: build-date Oct 27 2024 version 20240422~085300 c944557b
Loading: ./bootcode4.bin
Waiting for BCM2835/6/7/2711/2712...

Damit das EEPROM zu diesem Zeitpunkt beschrieben werden kann, schalten Sie den Dip-Schalter mit einer Pinzette oder ähnlichem auf die WRT-Seite (nach rechts).

Schalten Sie den DIP-Schalter auf WRT
Links: Pi 4 (USB Typ-A) und rechts: PL-R4 (USB-Typ-C) per Kabel verbunden

Wenn das USB-Kabel angeschlossen ist, wird es als externes Medium erkannt und der Schreibvorgang beginnt. (eingehängt in /media/username/).

OK, wenn das folgende Beispiel für ein korrektes Ergebnis richtig ist. Geschrieben in.

sudo ../rpiboot -d .

RPIBOOT: build-date Oct 27 2024 version 20240422~085300 c944557b
Loading: ./bootcode4.bin
Waiting for BCM2835/6/7/2711/2712...
Loading: ./bootcode4.bin
Sending bootcode.bin
Successful read 4 bytes 
Waiting for BCM2835/6/7/2711/2712...
Loading: ./bootcode4.bin
Second stage boot server
Loading: ./config.txt
File read: config.txt
Loading: ./pieeprom.bin
Loading: ./pieeprom.bin
Loading: ./pieeprom.sig
File read: pieeprom.sig
Loading: ./pieeprom.bin
File read: pieeprom.bin
Second stage boot server done

Wenn der Schreibvorgang erfolgreich abgeschlossen ist, leuchtet das mit dem PL-R4 verbundene Display grün.
Die Einschreibung wurde nun erfolgreich abgeschlossen.

Dinge, die zu überprüfen sind, wenn etwas schief läuft.

Die beiden Dinge, die nicht gut gelaufen sind und uns in Schwierigkeiten gebracht haben, waren

Zum einen können Sie, anders als noch vor ein paar Jahren, mit git clone bauen, aber wenn Sie nicht auch das Submodul einbinden, erhalten Sie eine Fehlermeldung.
Aktuelle Informationen finden Sie auf der Seite über.

usbboot: https: //github.com/raspberrypi/usbboot

Die andere Sache ist, dass sich seit bookworm der Pfad zur .bin-Datei in /lib/firmware/raspberrypi/bootloader~ geändert hat.
So ist sie jetzt in das Verzeichnis bootloader-2712 für den Pi5 und das Verzeichnis bootloader-2711 für die anderen aufgeteilt.

Das letzte, was Sie überprüfen sollten, ist das USB-Kabel.
Es kann sein, dass es nicht funktioniert, wenn das Kabel von schlechter Qualität ist oder wenn Sie einen Typ-C-zu-Typ-C-Konverterstecker verwenden.
Dies ist selten der Fall, aber wenn der Fehler unvermeidlich ist, überprüfen Sie ihn mit einem anderen Kabel.

Bestätigung des Umschreibens auf der PL-R4 Seite.

Die oben beschriebene Prozedur wurde erfolgreich in das EEPROM zurückgeschrieben.

Trennen Sie das angeschlossene USB-Kabel.
Hinweis: Denken Sie daran, die Dip-Schalter des PL-R4 zu lösen, bevor Sie ihn in Betrieb nehmen. (Jetzt nach links)

Schalten Sie den PL-R4 ein und nehmen Sie ihn in Betrieb, um zu überprüfen, ob dies richtig gemacht wurde.

Prüfen Sie die Bootloader-Version.
Wird in diesem Fall die Firmware ‚pieprom-2024-10-21.bin‘ verwendet?

vcgencmd bootloader_version

Die BOOT_ORDER wurde ebenfalls wie angegeben geschrieben.

sudo rpi-eeprom-config
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
BOOT_ORDER=0xf16

Vergleich von NVMe-Verbindungen und Geschwindigkeiten

Nachdem Sie die Bootsequenz neu geschrieben haben, bereiten Sie ein SSD-Laufwerk für die Verbindung mit NVMe vor und schreiben die Betriebssystem-Image-Datei.

Der PL-R4 kann nach Modell und Version auf der PiLink Download-Seite heruntergeladen werden.
Das geschriebene Betriebssystem wurde von dem für den PL-R4 verfügbaren Betriebssystem-Image (Bullseye) heruntergeladen und von dem angepassten Raspberry Pi Imager geschrieben.

Um auf SSD-Laufwerke zu schreiben, ist eine spezielle M.2 SSD-Festplattenstation eine gute Idee.
Als Ersatz wurde er diesmal von einem anderen PC in einem handelsüblichen externen SSD-Laufwerkskoffer geschrieben.

Wenn Sie sie mit einem USB-Kabel anschließen, kann sie wie eine microSD-Karte als externes Medium erkannt werden. Schreiben Sie einfach wie gewohnt mit dem Raspberry Pi Imager.

Bestätigung der Inbetriebnahme des SSD-Laufwerks

Der Bootloader wurde so geändert, dass er vom SSD-Laufwerk bootet, und das Betriebssystem wurde auf das SSD-Laufwerk geschrieben. Schließen Sie es also an das Pl-R4-Gerät an und überprüfen Sie es.

An der Unterseite des Geräts befindet sich ein Anschluss, an den auch SSD-Laufwerke angeschlossen werden können. Schrauben Sie ihn fest und Sie können loslegen.


Unterseite der PL-R4 Haupteinheit (Rückseite der Tragetafel) *Das Innere ist zu Demonstrationszwecken im eingefahrenen Zustand sichtbar.

Vergessen Sie nicht, vor dem Einschalten der Stromversorgung den eMMC-Schreib-Dip-Schalter auf OFF (linke Seite) zu stellen. Wenn er schreibaktiviert bleibt (WRT-Seite), lässt er sich nicht starten.

Lassen Sie uns das mit ein paar Befehlen ausprobieren.

Der Befehl df zeigt, dass /dev/nvme0n1p1 in /boot eingehängt ist.

df -h

Filesystem       Size  Used  Avail Use% Mounted on
/dev/root        118G  4.2G  109G    4% /
devtmpfs         1.8G     0  1.8G    0% /dev
tmpfs            1.8G     0  1.8G    0% /dev/shm
tmpfs            724M  1.2M  723M    1% /run
tmpfs            5.0M  4.0K  5.0M    1% /run/lock
/dev/nvme0n1p1   255M   32M  224M   13% /boot
tmpfs            362M   28K  362M    1% /run/user/1000

Der Befehl fdisk liefert etwas mehr Details.

sudo fdisk -l /dev/nvme0n1

Disk /dev/nvme0n1: 119.24 GiB, 128035676160 bytes, 250069680 sectors
Disk model: TS128GMTE452T2                          
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: *******

Device         Boot  Start       End   Sectors  Size Id Type
/dev/nvme0n1p1        8192    532479    524288  256M  c W95 FAT32 (LBA)
/dev/nvme0n1p2      532480 250069679 249537200  119G 83 Linux

Der Befehl lsblk zeigt, dass es microSD-Karten, eMMC und NVMe-verbundene SSD-Laufwerke gibt, wobei /boot auf NVMe gemountet ist.

lsblk

NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
mmcblk2      179:0    0  29.1G  0 disk 
└─mmcblk2p1  179:1    0  29.1G  0 part /media/pi/9016-4EF8
mmcblk0      179:32   0  29.1G  0 disk 
├─mmcblk0p1  179:33   0   512M  0 part 
└─mmcblk0p2  179:34   0  28.6G  0 part 
mmcblk0boot0 179:64   0     4M  1 disk 
mmcblk0boot1 179:96   0     4M  1 disk 
nvme0n1      259:0    0 119.2G  0 disk 
├─nvme0n1p1  259:1    0   256M  0 part /boot
└─nvme0n1p2  259:2    0   119G  0 part /

Finden Sie die Geschwindigkeit heraus.

Prüfen Sie dann die Geschwindigkeit des SSD-Laufwerks.
Wir haben die Lesegeschwindigkeit mit dem Befehl hdparm gemessen.

Der PL-R4 führt die Befehle zur Messung selbst aus.

NVMe

NVMe-verbundene SSD-Laufwerke werden mit 375 MB/s angegeben.

sudo hdparm -t /dev/nvme0n1

/dev/nvme0n1:
 Timing buffered disk reads: 1130 MB in  3.00 seconds = 376.54 MB/sec

Es ist leicht zu vergessen, dass der Pi 5 jetzt im Angebot ist, aber dieses Mal ist es ein SSD-Laufwerk, das in den CM4 bootet – es ist nicht vollständig PCIe-kompatibel wie der Pi 5, also ist es eine Größenordnung anders, wenn nicht sogar etwas weniger schnell.

eMMC

Der nächste Schritt ist eMMC.

sudo hdparm -t /dev/mmcblk0

/dev/mmcblk0:
 Timing buffered disk reads: 250 MB in  3.02 seconds =  82.88 MB/sec

Bei der eMMC waren es etwa 82 MB/s.

microSD-Karte

Schließlich gibt es noch die microSD-Karte.

sudo hdparm -t /dev/mmcblk2

/dev/mmcblk2:
Timing buffered disk reads:  28 MB in  3.09 seconds =   9.06 MB/sec

Im Gegensatz zum Pi 4 microSD-Kartenstart auf dem Markt hat die PL-R4 keine Geschwindigkeit von etwa 10 MB/s oder so. Das ist eine Besonderheit des Produkts.
Bei einem typischen Raspberry Pi wären es etwa 20-30 MB/s.

Ergebnisse dieses Geschwindigkeitstests

Die Geschwindigkeit des SSD-Laufwerks war ohne Vergleich schnell genug.

ErgebnisSSDeMMC
microSD Transcend32GB
LesegeschwindigkeitCa. 376 MB/s.Ca. 82 MB/sCa. 10 MB/s

*Die Werte für microSD-Karten basieren auf den „PL-R4“-Spezifikationen und Anpassungen.



M ehrere Durchläufe hdparm ist eine einfache Messung. Sie können versuchen, sie mit dem folgenden Befehl mehrfach auszuführen.

for i in $(seq 5); do sudo hdparm -t /dev/mmcblk2; sleep 5; done

Nach Punkten vergleichen

Eine weitere Messung wurde auch mit einem Skript-Tool durchgeführt, das Messungen über das Internet austauschen kann.
Dieses Tool macht dasselbe wie der Befehl hdparm. Es bietet eine detailliertere Anzeige und eine einzigartige Bewertungsmethode für den Vergleich der Geschwindigkeiten.
Das Ergebnis war hier dasselbe: 355 MB/s Lesen.

Das Skript-Tool wurde bisher unter dem Benutzernamen raspida registriert, mit Pi4, Pi5 und SSD-Laufwerken mit unterschiedlichen Bedingungen.
Bitte lesen Sie nach.

PiBenchmarks: https://pibenchmarks.com/user/raspida/

Start des SSD-Laufwerks auch in CM4.

Im Gegensatz zum allgemeinen Pi 4 mag das Ändern des Bootloaders beim CM4 ein wenig umständlich erscheinen.
Nichtsdestotrotz ist der PL-R4 einfacher zu verstehen als die Verwendung des CM4 mit einer Erweiterungslogikkarte, da er über einen Dip-Schalter für die Schreibumschaltung verfügt.

Zum Zeitpunkt der Erstellung dieses Artikels konnte der Vorgang problemlos abgeschlossen werden, wenn die Schritte befolgt wurden.
Außerdem wird die Startsequenz in das EEPROM geschrieben, so dass sie nur einmal geändert werden muss.

Je nachdem, wofür Sie den Raspberry Pi verwenden, sind SSD-Laufwerke wahrscheinlich unverzichtbar, da sie größere Geschwindigkeitsvorteile bieten als microSD-Karten oder eMMC-Boot.
Man kann sich vorstellen, dass eine microSD-Karte als separater Datenbereich verwendet werden kann, was die Nutzung, auch im Notfall, erleichtert.

CM4 kann auch für die Aktivierung von SSD-Laufwerken verwendet werden.


Artikel beigetragen von Raspida

Raspberry Pi-Informationsseite, die auch von Nicht-Ingenieuren genutzt werden kann. raspida.com Raspida betreibt raspida.com, eine Raspberry Pi-Informationsseite, die auch für Nicht-Ingenieure interessant ist. Trägt zur PiLink-Website über den Raspberry Pi für den industriellen Einsatz bei.

Tags: