DFUとは何か

July 29, 2026 · 訪問者

組み込みボードをPCに接続したとき、ドライバのない奇妙なUSBデバイスとして認識されるのを見たことがあるなら、それはおそらく DFUモード(Device Firmware Update)に入っていたのだろう。

DFUの正体

DFUはUSB Implementers Forumによって定義されたUSBデバイスクラスであり、もともとは製品固有のツールを一切使わずにUSB周辺機器のファームウェアを更新するために作られた。DFUをサポートするデバイスは、小さく標準化されたインターフェースを公開する。ホスト側のツールはそれに問い合わせを行い、新しいファームウェアイメージを送信し、新しいコードへの再起動をトリガーできる——それらすべてが、他のあらゆる用途に使われているのと同じUSBケーブル一本で行われる。

組み込みボードにおいて「DFUモード」とは、通常、ブートローダー自体(例えばU-Boot)がLinuxを起動する代わりに最小限のDFUスタックを実行している状態を指す。ボードはホスト上でDFUクラスのUSBデバイスとして現れ、dfu-utilのようなツールを使えば、書き込み可能なターゲット(パーティション、メモリ領域など、ブートローダーが公開することを選んだもの)を一覧表示し、そこに直接書き込むことができる。

なぜ重要なのか

DFUが組み込み開発と量産の現場で真に有用である理由はいくつかある。

同じボード上で出会うことになる隣接した仕組みとDFUを対比しておく価値がある。fastboot(Androidのプロトコルで、目的は似ているが伝送形式が異なる)や、swupdateRAUCのような完全なシステムイメージツール——これらは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は、うまく機能しているときには存在を意識させない類のインフラの一つだ。ケーブルを挿し、コマンドを一つ実行するだけで、1分前まで起動できなかったボードが復活する。興味深いエンジニアリングのほとんどは、ブートローダー側を正しく作り込むことにある——何を公開するか、それが実際のストレージにどうマッピングされるか、そして転送が途中で中断されたときにどう安全に失敗するか、といった点だ。

今回は短めの記事だった——具体的な実装(とそれらが厄介になる部分)については、また今後の記事で掘り下げていきたい。

関連記事

参考文献

コメント