DFU란 무엇인가

July 29, 2026 · 방문자

임베디드 보드를 컴퓨터에 꽂았을 때 낯설고 드라이버 없는 USB 장치로 인식되는 모습을 본 적이 있다면, 그 보드는 DFU 모드 — Device Firmware Update — 상태였을 가능성이 크다.

DFU가 실제로 무엇인가

DFU는 USB Implementers Forum이 정의한 USB 장치 클래스로, 원래는 제품별 전용 도구 없이 USB 주변기기의 펌웨어를 업데이트하기 위해 만들어졌다. 이를 지원하는 장치는 작고 표준화된 인터페이스를 노출한다. 호스트 측 도구는 이 장치에 질의하고, 새 펌웨어 이미지를 전송하며, 새 코드로 재부팅하도록 트리거할 수 있다 — 이 모든 과정이 다른 용도로도 쓰이는 동일한 USB 케이블을 통해 이뤄진다.

임베디드 보드에서 "DFU 모드"란 대개 부트로더 자체(예: U-Boot)가 리눅스를 부팅하는 대신 최소한의 DFU 스택을 실행 중이라는 뜻이다. 이때 보드는 호스트에 DFU 클래스 USB 장치로 나타나고, dfu-util 같은 도구를 사용해 플래시 가능한 대상(파티션, 메모리 영역 등 부트로더가 노출하기로 선택한 무엇이든)을 나열하고 직접 기록할 수 있다.

왜 중요한가

DFU를 임베디드 개발 및 양산 환경에서 진정으로 유용하게 만드는 몇 가지 요소가 있다.

DFU를 같은 보드에서 마주치게 될 인접한 메커니즘들과 대조해 볼 필요가 있다. fastboot(안드로이드의 프로토콜로, 목표는 비슷하지만 와이어 포맷이 다르다)와, 리눅스가 이미 실행 중일 때 업데이트 전달과 롤백을 처리하는 swupdateRAUC 같은 전체 시스템 이미지 도구들이다 — 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분 전만 해도 부팅조차 안 되던 보드가 다시 살아난다. 흥미로운 엔지니어링의 대부분은 부트로더 쪽을 제대로 구현하는 데 있다 — 무엇을 노출할지, 그것이 실제 저장 장치에 어떻게 매핑되는지, 전송이 중간에 끊겼을 때 어떻게 안전하게 실패하는지.

이번 글은 짧게 마무리한다 — 구체적인 구현 사례들(그리고 그것들이 까다로워지는 지점)은 다음 글에서 더 깊이 다룰 예정이다.

더 읽을거리

관련 글

댓글