querdenker engineering
System Recovery

Image flashen

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

Zuletzt geändert: 17. September 2026

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 gemäß den Technischen Daten des jeweiligen Systems
  • 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 Erfolgsmeldung dient als erste Kontrolle des Flash-Vorgangs.

Erfolgsmeldung stm32cubeprogrammer
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 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.

qdGate wird nicht erkannt

Fehlgeschlagenen Flash-Vorgangs
Device nicht gefunden.

Wenn STM32CubeProgrammer bei --list usb kein Gerät meldet, prüfe die Verbindung in dieser Reihenfolge:

  1. Versorgung prüfen: Das qdGate muss eingeschaltet sein. Die Power-Anzeige muss leuchten. Die Anforderungen an das Netzteil stehen in den Technischen Daten des jeweiligen Systems.
  2. USB-Verbindung prüfen: Verbinde den Host mit einem datenfähigen USB-C-Kabel an der Buchse USB Client des qdGate. Diese Buchse stellt die USB-OTG-Verbindung für das Flashen bereit; die Buchse USB Host ist dafür nicht geeignet.
  3. Bootmodus prüfen: Alle drei Schalter des DIP-Schalters S1 müssen auf ON stehen. Schalte die Versorgung nach dem Anschließen des USB-Kabels gegebenenfalls aus und wieder ein oder drücke die Reset-Taste.
  4. Host-Erkennung prüfen:
    • Unter Windows muss das qdGate im Geräte-Manager als USB-/DFU-Gerät erscheinen.
    • Unter Linux muss es in der Ausgabe von lsusb erscheinen. Beobachte bei Bedarf mit dmesg --follow, ob beim An- und Abstecken ein USB-Gerät erkannt wird.
    • Anschließend muss auch [STM32PROGRAMMER-PFAD]/bin/STM32_Programmer_CLI --list usb das Gerät auflisten.
  5. Berechtigungen unter Linux prüfen: Wenn das Gerät in lsusb sichtbar ist, aber nicht von STM32CubeProgrammer verwendet werden kann, wiederhole die Schritte unter Host vorbereiten. Verbinde das USB-Kabel anschließend erneut. Das Flash-Programm wird danach ohne sudo ausgeführt.

Wenn das qdGate weder im Geräte-Manager noch in lsusb sichtbar ist, liegt die Ursache wahrscheinlich bei der Versorgung, dem Kabel, dem USB-Anschluss oder dem Bootmodus. Prüfe diese Punkte erneut, bevor du die Flash-Dateien oder den Flash-Befehl untersuchst.

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.