DFU

Updated: September 28, 2024

Device Firmware Update (DFU) mode is more powerful than Recovery mode, and is largely undocumented for the end user. It lets an iOS device connect to Finder without loading the bootloader or iOS itself.

The mode is mostly used to update firmware. It also can be used to install a bootloader.


Table of Contents


Why DFU

Reasons the you may need DFU


Enter DFU

There is a convoluted set of button presses to enter DFU mode. For iPhone 8 or later.

  1. Press and then release the Volume Up button.
  2. Immediately press and release the Volume Down button.
  3. Now, press and hold the Side button for 10 seconds.
    The screen will go black.
  4. Keep holding the Side button, and now press the Volume Down button for 5 seconds.
  5. After 5 seconds, release the Side button but keep holding the Volume Down button.
  6. Continue pressing the Volume Down button for another 10 seconds.
    All this while your iPhone’s screen is black.
  7. Let go the Volume Down button when Finder has detected DFU mode.
  8. Click Ok then Restore iPhone.

Now, you want to do all that?? Or see why cli is the best??

# enter DFU mode
ideviceenterdfu

Exit DFU

Not as convoluted as Enter DFU. For iPhone 8 or later.

  1. Quick press Volume Up button.
  2. Quick press Volume Down button.
  3. Hold down the Side button.
  4. Power Slide to turn off iPhone.
  5. After turning back on it should be out of DFU mode.

else, use

# exit DFU mode
ideviceexitdfu

Commands

These commands are from libimobiledevice, a cross-platform software library that talks to iOS devices.

idevice
# get device info
ideviceinfo

# get device name
idevicename

# get device model
idevicemodel

# get device serial
ideviceserial

# get device UDID
idevicegetudid

# get device battery level
idevicebattery

# get screenshot
idevicescreenshot

# enter DFU mode
ideviceenterdfu

# exit DFU mode
ideviceexitdfu

# enter Recovery mode
ideviceenterrecovery

# exit Recovery mode
ideviceexitrecovery

# backup and restore
idevicebackup2

# debug console
idevicedebug
ifuse
ifuse
  -d, --debug               # enable debug
  -h, --help                # show help
  -n, --network             # connect to network device
  -o opt,[opt ...]          # mount options
  -u, --udid                # mount device by UDID
  -V, --version             # enable version

  --contianer <appid>       # mount container by app of appid
  --documnents <appid>      # mount documents by app of appid
  --list-apps               # list apps
  --root                    # mount as root