querdenker engineering
System Recovery

Image flashen

Ein System-Image als Wiederherstellungsmaßnahme auf das Zielsystem aufspielen.

Das Flashen eines Images ist für die Wiederherstellung vorgesehen, wenn das System nicht mehr startet oder ein Update über RAUC nicht möglich ist. Für reguläre Updates sollte RAUC verwendet werden.

Voraussetzungen

  • flashlayout.tsv aus dem qdCoreX-Systemrepository
  • alle in flashlayout.tsv referenzierten Images
  • eine stabile Stromversorgung mit 24 V / 500 mA
  • ein USB-C Kabel zum Programmieren, eingesteckt an der Buchse „USB Client“
  • STM32CubeProgrammer

Gehäuse öffnen

Für den Recovery-Vorgang muss das Gehäuse geöffnet werden, damit der DIP-Schalter S1 erreicht und umgestellt werden kann.

Host vorbereiten

Installiere STM32CubeProgrammer nach der Installationsanleitung von ST.

Unter Linux benötigt STM32CubeProgrammer Zugriff auf das USB-Gerät. Installiere anschließend die von ST mitgelieferten udev-Regeln aus dem Verzeichnis Driver/rules der Installation:

sudo cp [STM32PROGRAMMER-PFAD]/Driver/rules/*.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger

Die Regeln werden auf dem Host installiert; das Flash-Programm selbst wird danach ohne sudo ausgeführt. Ziehe das USB-C-Kabel anschließend ab und verbinde es erneut.

Flash-Dateien bereitstellen

Lege flashlayout.tsv und alle darin referenzierten Images in einem Arbeitsverzeichnis ab. Die Images stammen aus dem Buildroot-Build oder aus [IMAGE-ABLAGE-ODER-DOWNLOAD].

[RECOVERY-VERZEICHNIS]/
├── flashlayout.tsv
├── [IMAGE-1]
├── [IMAGE-2]
└── ...

Die Dateinamen und Pfade in flashlayout.tsv müssen zu den vorhandenen Dateien passen. Verwende nur die zum selben qdCoreX-/Buildroot-Stand gehörenden Dateien.

Recovery durchführen

  1. Schalte das System aus.

  2. Setze alle drei Schalter des DIP-Schalters S1 auf ON. Dadurch wird der UART/USB-Boot aktiviert (siehe Abbildung).

  3. Verbinde das USB-C-Programmierkabel mit der Buchse „USB Client“.

  4. Schalte die Versorgung ein. Das System startet im Monitor-Modus und wartet auf Eingaben über USB. Ein Druck auf die Reset-Taste genügt häufig ebenfalls; falls das Gerät nicht erkannt wird, schalte die Versorgung aus und wieder ein.

  5. Prüfe, ob der Host das Gerät im USB-/DFU-Modus erkennt:

    [STM32PROGRAMMER-PFAD]/bin/STM32_Programmer_CLI --list usb

    Der Befehl muss das angeschlossene Gerät auflisten. Wenn kein Gerät erscheint, siehe Fehlerbehebung.

  6. Schreibe und verifiziere das vollständige Image:

    [STM32PROGRAMMER-PFAD]/bin/STM32_Programmer_CLI -c port=usb1 -d flashlayout.tsv
DIP-Schalter S1 mit allen drei Schaltern in Stellung ON
UART-/USB-Boot: alle drei Schalter von S1 stehen auf ON.

Ersetze [STM32PROGRAMMER-PFAD] durch den Installationspfad von STM32CubeProgrammer. Führe den Befehl in dem Verzeichnis aus, in dem flashlayout.tsv liegt, oder gib für die TSV-Datei einen absoluten Pfad an. Die Datei beschreibt das vollständige Flash-Layout einschließlich TF-A, OP-TEE, U-Boot, Partitionstabelle und den Images für die Partitionen.

Flash-Ergebnis prüfen

Nach einem erfolgreichen Flash-Vorgang sollte STM32CubeProgrammer den Abschluss ohne Fehler melden. Die genaue Erfolgsmeldung und eine zusätzliche Prüfung werden noch ergänzt.

Platzhalter für eine Abbildung der erfolgreichen Image-Programmierung
Platzhalter für die Erfolgskontrolle nach dem Flashen.

Normalbetrieb wiederherstellen

Nach dem erfolgreichen Flashen:

  1. Schalte die Versorgung aus.
  2. Setze den mittleren Schalter von S1 auf OFF. Die beiden äußeren Schalter bleiben auf ON.
  3. Schalte die Versorgung wieder ein. Mit dem mittleren Schalter auf OFF startet das System im Normalbetrieb von der eMMC.

Reset-Taste verwenden

Das Aus- und Einschalten ist nicht immer erforderlich. In vielen Fällen genügt es, die Reset-Taste zu drücken. Wenn das System danach nicht wie erwartet startet, führe stattdessen einen vollständigen Power-Cycle durch.

DIP-Schalter S1 für den Normalbetrieb mit eMMC-Boot
Normalbetrieb: Der mittlere Schalter von S1 steht auf OFF.

Fahre anschließend mit dem Getting Started fort.

Fehlerbehebung

Das Gerät wird mit --list usb nicht erkannt

  • Prüfe, ob das USB-C-Kabel an der Buchse „USB Client“ angeschlossen ist.
  • Prüfe, ob alle drei Schalter von S1 auf ON stehen.
  • Prüfe die Stromversorgung und drücke gegebenenfalls die Reset-Taste.
  • Wenn das Gerät weiterhin nicht erscheint, installiere die udev-Regeln erneut und verbinde das USB-C-Kabel danach erneut.

Das Flashen schlägt wegen fehlender Dateien fehl

Prüfe, ob flashlayout.tsv und alle darin referenzierten Images im angegebenen Arbeitsverzeichnis vorhanden sind. Verwende Dateien aus demselben qdCoreX-/Buildroot-Stand.

Der Flash-Vorgang schlägt aus einem anderen Grund fehl

Beende den Vorgang nicht durch das Zurückstellen von S1, solange die Programmierung noch läuft. Sichere die vollständige Ausgabe von STM32_Programmer_CLI; die konkreten Fehlerfälle und ihre Maßnahmen werden noch ergänzt.

Platzhalter für eine Abbildung eines fehlgeschlagenen Flash-Vorgangs
Platzhalter für die Fehlerdiagnose beim Flashen.

[PLATZHALTER: Erwartete Erfolgsmeldung und Prüfung des USB-Zugriffs ohne sudo]