View source for Dfu-util

From Openmoko

Jump to: navigation, search

You do not have permission to edit this page, for the following reasons:

  • The action you have requested is limited to users in the group: Administrators.
  • You must confirm your email address before editing pages. Please set and validate your email address through your user preferences.

You can view and copy the source of this page:

Template used on this page:

Return to Dfu-util.

Personal tools
WARNING: Dfu-util is currently broken on big-endian architectures

WARNING: Dfu-util seems to be currently broken on 64-bit

WARNING: Do not flash U-Boot unless you are sure you need to

NOTE: You need to connect your neo directly to your pc with no hub between. Otherwise there could be problems with the hub and the usb reset.


dfu-util is a program that implements the Host (PC) side of the USB DFU (Universal Serial Bus Device Firmware Upgrade) protocol.

In the Openmoko project, we use this program to communicate with our specially enhanced u-boot boot loader, which implements the DFU device side.

Using dfu-util and your smartphone, you can

  • transfer and flash partitions in internal NAND Flash.
  • transfer anything into RAM
    • this can be used for fast development cycles of low-level code such as kernels without flashing them
  • read out the current internal NAND partitions
    • this is an easy and efficient way of doing full backups of your phone

Source Code

On Debian and Ubuntu, you'll need libusb-dev:

sudo apt-get install libusb-dev autogen pkg-config autotools-dev autoconf automake

On Fedora you'll need libusb-devel and libusb-static:

yum install libusb-devel libusb-static

On Gentoo you can use the live svn ebuild from bug 201920. You will need to put this in an overlay which is described here. Now install it with:

emerge -va app-mobilephone/openmoko-dfu-util

You can check out and build the latest version of dfu-util using the following subversion commands:

svn co
cd dfu-util

The resulting binary is dfu-util/src/dfu-util.


Binary packages will be made available as part of the regular Openmoko builds [1]. Currently, there is a dfu-util for Linux/i386.

Currently, there is a largely untested binary for Win32 (see Dfu-util-windows). Windows users can refer to No_Linux for a more tested approach.

Compiling dfu-util on Mac:

Reference Documentation

To run dfu-util, you need to have /proc/bus/usb mounted and working. If you don't (ls /proc/bus/usb is empty), you can add this line to your fstab:

usbfs   /proc/bus/usb   usbfs   defaults

Before using dfu-util

You'll need to boot your phone into the NAND Boot Menu:

  • Ensure your phone is connected directly to the host computer by USB (not the USB-charger! :)
  • Ensure that you execute all dfu-util commands as root
  • Power off the phone
  • Hold down AUX
  • Press POWER until the Boot Menu appears

Command-line options


dfu-util - (C) 2007 by Openmoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

Usage: dfu-util [options] ...
  -h --help                     Print this help message
  -V --version                  Print the version number
  -l --list                     List the currently attached DFU capable USB devices
  -d --device vendor:product    Specify Vendor/Product ID of DFU device
  -c --cfg config_nr            Specify the Configuration of DFU device
  -i --intf intf_nr             Specify the DFU Interface number
  -a --alt alt_nr               Specify the Altseting of the DFU Interface
  -t --transfer-size            Specify the number of bytes per USB Transfer
  -U --upload file              Read firmware from device into <file>
  -D --download file            Write firmware from <file> into device
  -R --reset                    Issue USB Reset signalling once we're finished


Using the --list option, you can list the available DFU capable devices, their configuration, interface and altsettings. Below is an example for a current Neo1973 phone in u-boot Runtime Mode

# ./dfu-util --list
dfu-util - (C) 2007 by OpenMoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

Found DFU Runtime: [0x1457:0x5119] devnum=0, cfg=0, intf=2, alt=0, name="USB Device Firmware Upgrade"

Below is an example for a current Neo1973 phone in u-boot DFU Mode

# ./dfu-util --list
dfu-util - (C) 2007 by OpenMoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=0, name="RAM 0x32000000"
Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=1, name="u-boot"
Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=2, name="u-boot_env"
Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=3, name="kernel"
Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=4, name="splash"
Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=5, name="rootfs"

This shows you six interfaces, all in configuration 0 and interface 0, with altsetting 0...5, for RAM and each partition.


You can specify the USB Vendor and Product ID of the device you want to program:

dfu-util --device 0x1457:0x5119

If you only have one standards-compliant DFU device attached to your PC, this is optional. However, as soon as you have multiple DFU devices, dfu-util will detect this and abort, asking you to specify which device it shall use.


Specifies the size of each individual USB transfer. If you don't use it, the maximum possible size for your combination of host operating system and USB device is chosen (for optimal performance).


download the given file into the device.


upload from the DFU device into the given file[name].

NOTE: Upload support is currently broken


There's no full-fledged manual yet. Instead, some examples:

Flashing the rootfs

dfu-util -a rootfs -R -D /path/to/openmoko-devel-image.jffs2

Flashing the kernel

dfu-util -a kernel -R -D /path/to/uImage

Flashing the bootloader

dfu-util -a u-boot -R -D /path/to/u-boot.bin

Copying a kernel into RAM

dfu-util -a 0 -R -D /path/to/uImage

Once this has finished, the kernel will be available at the default load address of 0x32000000 in Neo1973 RAM.

NOTE: You cannot transfer more than 2MB of data into RAM using this method

Troubleshooting notes

If during flashing of an image using dfu-util you're consistently getting an error -110 message, check that the size of the destination NAND partition is big enough to hold the image. For example the kernel partition is only 2 MB big by default and a kernel with debugging info compiled-in can often exceed this. It's possible to change the partition layout to enlarge a given partition and shrink other partitions but you have to remember to reflash all partitions whose start offset has changed afterwards. To adjust partitions layout use the mtdparts u-boot command.

If in turn you're facing errors in seemingly random places during the flashing of images, most likely the USB hub or cable through which your Neo1973 is connected, is of too poor quality. It is recommended that you always connect the phone directly to the host when using dfu-util.

If dfu-util reports a message like the following, before it starts flashing:
Resetting USB...
not at least 2 device changes found ?!?
Lost device after RESET?
retry the command - it should work on a second run.

See also