Was ist DFU?
July 29, 2026 · – Besucher
Wenn du schon einmal ein eingebettetes Board an deinen Computer angeschlossen und beobachtet hast, wie es sich als merkwürdiges, treiberloses USB-Gerät anmeldet, stand es mit guter Wahrscheinlichkeit im DFU-Modus — Device Firmware Update.
Was DFU eigentlich ist
DFU ist eine vom USB Implementers Forum definierte USB-Geräteklasse, die ursprünglich dafür gedacht war, die Firmware von USB-Peripheriegeräten ohne produktspezifische Tools zu aktualisieren. Ein Gerät, das sie unterstützt, stellt eine kleine, standardisierte Schnittstelle bereit: Ein Host-seitiges Tool kann es abfragen, ein neues Firmware-Image senden und einen Neustart in den neuen Code auslösen — alles über dasselbe USB-Kabel, das auch für alles andere verwendet wird.
Bei eingebetteten Boards bedeutet der „DFU-Modus" in der Regel, dass der Bootloader selbst (zum Beispiel U-Boot) einen minimalen DFU-Stack ausführt, anstatt Linux zu booten. Das Board meldet sich beim Host als USB-Gerät der DFU-Klasse, und ein Tool wie dfu-util kann die flashbaren Ziele (Partitionen, Speicherbereiche, was auch immer der Bootloader offenlegt) auflisten und direkt beschreiben.
Warum es wichtig ist
Ein paar Dinge machen DFU in der eingebetteten Entwicklung und in der Produktion wirklich nützlich:
- Keine zusätzliche Hardware. Keine JTAG-Sonde, kein UART-Adapter — nur der USB-Port, den das Board ohnehin schon hat.
- Wiederherstellbarkeit. Wenn ein Board „gebrickt" ist oder kein gültiges Betriebssystem im Flash-Speicher hat, ist der DFU-Modus (oft ausgelöst durch einen Strap-Pin oder einen Boot-ROM-Fallback) häufig die letzte Verteidigungslinie, um es wieder flashbar zu machen.
- Standardisierung. Da es sich um eine echte USB-Klasse mit echten Treibern handelt, funktioniert es betriebssystemübergreifend gleich, ohne herstellerspezifischen Kernel-Treiber.
Es lohnt sich, DFU mit verwandten Mechanismen zu vergleichen, denen man auf denselben Boards begegnet: fastboot (Androids Protokoll, ähnliches Ziel, anderes Übertragungsformat) und vollständige System-Image-Tools wie swupdate oder RAUC, die die Auslieferung von Updates und Rollbacks übernehmen, sobald Linux bereits läuft — DFU arbeitet in der Regel eine Ebene darunter, näher am Bootloader.
Ein grober Arbeitsablauf
Eine typische DFU-Sitzung sieht von der Host-Seite aus so aus:
# see what the board exposes in DFU mode
dfu-util -l
# flash an image to a specific alt-setting/partition
dfu-util -a 0 -D firmware.bin
Das Board startet neu in den DFU-Handler des Bootloaders, das Host-Tool handelt die Übertragung aus, und das Image landet dort, wo der Bootloader diese Alt-Setting zugeordnet hat — oft eine bestimmte eMMC-/NAND-Partition oder ein Staging-Bereich, den der Bootloader beim nächsten Start flasht.
Schlussgedanke
DFU ist eine dieser Infrastrukturkomponenten, die unsichtbar ist, wenn sie funktioniert: Man steckt ein Kabel ein, führt einen Befehl aus, und ein Board, das eine Minute zuvor nicht booten konnte, läuft wieder. Der größte Teil der interessanten technischen Arbeit steckt darin, die Bootloader-Seite richtig hinzubekommen — was offengelegt wird, wie es auf den tatsächlichen Speicher abgebildet wird, und wie es sicher fehlschlägt, wenn die Übertragung mittendrin unterbrochen wird.
Das war ein kurzer Beitrag — ich werde in einem zukünftigen Beitrag tiefer auf konkrete Implementierungen eingehen (und darauf, wo es kompliziert wird).
Weiterführende Literatur
- Universal Serial Bus Device Class Specification for Device Firmware Upgrade, Revision 1.1 — die offizielle USB-IF-Spezifikation, auf der DFU basiert.
- dfu-util — das im obigen Beispiel verwendete Host-seitige Tool.
- U-Boot: Device Firmware Upgrade (DFU) — wie DFU im Bootloader implementiert ist, den die meisten eingebetteten Linux-Boards verwenden.
Weiterführende Artikel
- Die Boot-Kette von eingebettetem Linux — wie der Bootloader die Kontrolle an den Kernel übergibt
- Was ist ein Device Tree? — wie dem Kernel die Hardware beschrieben wird
Kommentare