Что такое DFU?

July 29, 2026 · посетителей

Если вы когда-нибудь подключали встраиваемую плату к компьютеру и видели, как она определяется как странное USB-устройство без драйвера, велика вероятность, что она находилась в режиме DFU — Device Firmware Update.

Что такое DFU на самом деле

DFU — это класс USB-устройств, определённый USB Implementers Forum, изначально предназначенный для обновления прошивки USB-периферии без какого-либо специфического для продукта инструментария. Устройство, поддерживающее его, предоставляет небольшой стандартизированный интерфейс: инструмент на стороне хоста может опросить его, отправить новый образ прошивки и инициировать перезагрузку в новый код — всё через тот же USB-кабель, который используется для всего остального.

На встраиваемых платах "режим DFU" обычно означает, что сам загрузчик (например, U-Boot) выполняет минимальный стек DFU вместо загрузки Linux. Плата определяется на хосте как USB-устройство класса DFU, а такой инструмент, как dfu-util, может вывести список целей для прошивки (разделы, области памяти — всё, что загрузчик решит предоставить) и записывать в них напрямую.

Почему это важно

Несколько вещей делают DFU по-настоящему полезным в разработке и производстве встраиваемых систем:

Стоит сопоставить DFU со смежными механизмами, с которыми вы столкнётесь на тех же платах: fastboot (протокол Android, похожая цель, другой формат передачи) и полноценные инструменты обновления образа системы вроде swupdate или RAUC, которые занимаются доставкой обновлений и откатом уже после того, как Linux запущен — DFU обычно работает на уровень ниже, ближе к загрузчику.

Примерный рабочий процесс

Типичная сессия DFU со стороны хоста выглядит так:

# 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

Плата перезагружается в обработчик DFU загрузчика, инструмент на хосте согласовывает передачу, и образ попадает туда, куда загрузчик отобразил этот alt-setting — часто это конкретный раздел eMMC/NAND или промежуточная область, которую загрузчик прошивает при следующей загрузке.

Заключительная мысль

DFU — одна из тех частей инфраструктуры, которые незаметны, когда работают: вы подключаете кабель, запускаете одну команду, и плата, которая минуту назад не могла загрузиться, снова в строю. Большая часть интересной инженерной работы заключается в том, чтобы правильно реализовать сторону загрузчика — что предоставляется наружу, как это отображается на реальное хранилище и как всё безопасно завершается при обрыве передачи на середине.

Это был короткий пост — в одном из следующих я подробнее разберу конкретные реализации (и то, где они становятся запутанными).

Дополнительное чтение

По теме

Комментарии