blob: 833caa8c9f05a8fa2fc8c03d51e2481b8c2fa458 [file] [log] [blame] [view] [edit]
# Flash a Fuchsia image on a device
The [`ffx target flash`][ffx-target-flash] command can flash a Fuchsia image
on a device.
## Concepts
Fuchsia uses a Fastboot-based flashing mechanism to install a Fuchsia product
on a hardware device. The [Fastboot protocol][fastboot-src]{:.external}
(originally part of [Android][android-flash]{:.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.
## Flash the device {:#flash-the-device}
To flash a Fuchsia image on your device, do the following:
1. Connect the device to the host machine over USB or Ethernet.
2. [Boot the device into Fastboot
mode](#boot-the-device-into-fastboot-mode).
3. Check the device's state:
```posix-terminal
ffx target list
```
This command prints output similar to the following:
```none {:.devsite-disable-click-to-copy}
$ 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.
4. (**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:
```posix-terminal
FUCHSIA_NODENAME=<TARGET_DEVICE>
```
For example:
```none {:.devsite-disable-click-to-copy}
$ 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:
```posix-terminal
fx set-device <TARGET_DEVICE>`
```
For example:
```none {:.devsite-disable-click-to-copy}
$ 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.
5. Flash the device:
```posix-terminal
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:
```none {:.devsite-disable-click-to-copy}
$ ffx target flash -b ~/Downloads/fuchsia-image-example.zip
```
Once the flashing is finished, the device reboots and starts running
Fuchsia.
## Flash the device using a product bundle from fx create-pb-zip {:#flash-pb-zip}
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:
```posix-terminal
ffx target flash -b <FUCHSIA_IMAGE>
```
Replace `FUCHSIA_IMAGE` with the generated product bundle zip file, for
example:
```none {:.devsite-disable-click-to-copy}
$ ffx target flash -b pb.zip
```
Once the flashing is finished, the device reboots and starts running
Fuchsia.
## Boot the device into Fastboot mode {:#boot-the-device-into-fastboot-mode}
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.
```posix-terminal
ffx target reboot -b
```
After rebooting, the device boots into Fastboot mode.
<!-- Reference links -->
[fastboot-src]: https://android.googlesource.com/platform/system/core/+/master/fastboot/
[android-flash]: https://source.android.com/setup/build/running
[ffx-target-flash]: https://fuchsia.dev/reference/tools/sdk/ffx#flash