The ffx target flash command can flash a Fuchsia image on a device.
Fuchsia uses a Fastboot-based flashing mechanism to install a Fuchsia product on a hardware device. The Fastboot protocol{:.external} (originally part of Android{:.external}) is a mechanism for communicating with bootloaders over USB or Ethernet. This mechanism allows you to flash a Fuchsia prebuilt image on the device's non-volatile memory.
To be able to flash a Fuchsia image on a device, the bootloader of the device must support Fastboot mode. Once the device can boot into Fastboot mode, you can then use ffx target flash to flash a Fuchsia image on the device. However, if your device‘s bootloader doesn’t support Fastboot, you‘d first need to update the bootloader. Updating a device’s bootloader (to support Fastboot) typically requires instructions that are specific to the type and maker of the device, which is not covered in this guide.
Fuchsia prebuilt images can be obtained from various sources, such as Google Cloud Storage and project repositories. Additionally, custom prebuilt images can be generated from a Fuchsia source checkout. In either case, the prebuilt image used for flashing must match the target device.
To flash a Fuchsia image on your device, do the following:
Connect the device to the host machine over USB or Ethernet.
Check the device's state:
ffx target list
This command prints output similar to the following:
$ ffx target list NAME SERIAL TYPE STATE ADDRS/IP RCS <unknown> 01234ABCD012YZ Unknown Fastboot [] N
Verify that the device's state is Fastboot.
If ffx target list shows only a single device in Fastboot mode (as in the example above), ffx commands automatically target it. However, if multiple devices are connected, you need to specify a target device.
(Optional) Set a default Fuchsia target if multiple devices are present.
This step is needed if the ffx target list command in step 3 shows multiple devices and you wish to set a default target for ffx commands (instead of using the --target flag).
Setting a default Fuchsia target depends on the environment that you're working in:
{Fuchsia SDK}
For the Fuchsia SDK environment, use the FUCHSIA_NODENAME environment variable to set the target:
FUCHSIA_NODENAME=<TARGET_DEVICE>
For example:
$ FUCHSIA_NODENAME=fuchsia-5254-0063-5e7a
{fuchsia.git}
When working in the Fuchsia source checkout (fuchsia.git) environment, you can run the following fx command to set a default target device for your current build directory:
fx set-device <TARGET_DEVICE>`
For example:
$ fx set-device fuchsia-5254-0063-5e7a
Note: Having the FUCHSIA_NODENAME environment variable set overrides the fx set-device default target.
You can run fx unset-device to unset the default target.
Tip: Run ffx target default get to verify your default target.
Flash the device:
ffx target flash -b <FUCHSIA_IMAGE>
Replace FUCHSIA_IMAGE with an archive file that contains a Fuchsia prebuilt image and its flash manifest file, for example:
$ ffx target flash -b ~/Downloads/fuchsia-image-example.zip
Once the flashing is finished, the device reboots and starts running Fuchsia.
To flash a product bundle (.zip) created from running the fx create-pb-zip command in a Fuchsia source checkout setup, run the ffx target flash command with the -b flag:
ffx target flash -b <FUCHSIA_IMAGE>
Replace FUCHSIA_IMAGE with the generated product bundle zip file, for example:
$ ffx target flash -b pb.zip
Once the flashing is finished, the device reboots and starts running Fuchsia.
To trigger a Fuchsia device to boot into Fastboot mode, run the following command:
Note: This command works only if your device is already flashed with Fuchsia. Manually booting a device into Fastboot mode may require instructions specific to the device.
ffx target reboot -b
After rebooting, the device boots into Fastboot mode.