blob: f9bbea77666508f9ca1afd7c34e169e4fceb81c1 [file] [view]
# Gigaboot in C++
This folder contains source code for Fuchsia Gigaboot written in C++. It is built
using the physboot toolchain defined in `zircon/kernel/phys/efi/BUILD.gn`. The code
is currently under construction. It'll eventually replace the C gigaboot
implementation in the parent folder (b/235489025).
A gn target `src/firmware/gigaboot/cpp:esp` is added for producing a bootable
UEFI image that can be flashed to the device. To build the target, follow steps:
```
fx set workstation_eng.x64
fx build
```
The output path of the image is `<build_out_dir>/fuchsia.esp.blk`. The
following gives two ways to flash the image to a NUC device.
# Unit testing
To enable and run the unit test target, run:
```
fx set workstation_eng.x64 --with //src/firmware/gigaboot/cpp/tests
fx build
fx test --host gigaboot_unittests
```
# Userspace fastboot with USB installer
1. Follow instructions in [Install Fuchsia on a NUC] to prepare a bootable USB
with the Fuchsia installer image and bootstrap NUC for the first time. The
USB Fuchsia installer image has a userspace fastboot over tcp component that
can be used to flash gigaboot. This only needs to be done once.
2. Plug in the bootable USB and power on NUC. Find out the ip address of the
device from the serial log or via `ffx target list`.
3. Run `fastboot flash fuchsia-esp <gigaboot image> -s tcp:<ip address>`
4. Unplug the USB and power cycle the device. The device will now run the new
gigaboot image.
Repeat step 2-4 for future flash.
# Fastboot over tcp from gigaboot
Fastboot over tcp is enabled on gigaboot and supports `fastboot flash`. Once
device powers up, keep pressing `f` key to put device into fastboot mode. The
ip6 address is printed on the console/monitor. Run
`fastboot flash fuchsia-esp <gigaboot image> -s tcp:<ip address>` to flash the
image.
If a broken gigaboot is flashed to the device during development, use the USB
installer approach to recover.
[Install Fuchsia on a NUC]: /docs/development/hardware/intel_nuc.md