# Fuchsia u-boot

This repo contains a fork of [u-boot](README) that has been modified to boot
[Fuchsia](https://fuchsia.dev/).

## Building

This describes the basic build flow for a Linux x86_64 build host. You may be
able to get it working with a different host machine, toolchain, build commands,
etc but this is a known-working setup.

### Prerequisites

You'll need to install the compiler toolchain. Toolchain source is hosted at the
links below, refer to the included docs for instructions on how to build. You
may also be able to find prebuilt toolchain binaries online.

* gcc-linaro-4.8-2013.11
  * Source: https://chrome-infra-packages.appspot.com/p/fuchsia/third_party/source/gcc/linaro/+/vBpgfx_qKIXiyaRgG_4FJCaZpuB5DBggIXbBAEM43bMC
  * target architecture: `aarch64-none-elf`
* gcc-arm-none-eabi-6-2017-q2-update
  * Source: https://chrome-infra-packages.appspot.com/p/fuchsia/third_party/source/gcc/arm/arm-none-eabi/+/Pg0Ayh3y2Xx538OvmLcmmUon5YDxvk-EjDYVR0JPUSMC
  * target architecture: `arm-none-eabi`

Once you have the toolchain binaries, place them in an adjacent directory
`sdk/linaro/`, so the resulting tree looks like:

* <parent_dir>
  * `u-boot/`
  * `sdk/`
    * `linaro/`
      * `gcc-arm-none-eabi-6-2017-q2-update/`
        * `bin/`
        * `lib/`
        * etc.
      * `gcc-linaro-aarch64-none-elf-4.8-2013.11_linux/`
        * `bin/`
        * `lib/`
        * etc.

### Compiling

The simplest way to compile u-boot is to run:

```
./mk g12a_estelle_bx --board_name estelle-b4 --dev
```

The resulting image will be at `build/u-boot.bin`.

This will attempt to do some extra work that doesn't apply here, so you can
ignore any errors about other bootloader components (BL2, BL31, BL32). As long
as the binary was updated, the u-boot build completed successfully.
