Building a custom firmware for the Banana Pi BPI-F3
Table of Contents
I started building the firmware components for booting the BPI-F3 myself. While SpacemiT provides the source code
of the different components the official firmware is built from forks of older versions and without the
commit history. In my attempt to build a custom firmware I will use mainline versions where possible and
otherwise create my own forks from mainline sources and merge necessary changes into it.
Contents:
Status#
| name | build | test | comment |
|---|---|---|---|
| bootinfo | ✅ | ✅ | generated files are identical to vendor files |
| fsbl | ❌ | ❌ | no build yet |
| opensbi | ✅ | ✅ | boot ok (opensbi messages shown in console) |
| u-boot | ✅ | ❌ | doesn’t boot linux and only detects 4GB RAM |
Bootinfo#
The first part of the boot process we have control of is the bootinfo binary. In the SpacemiT BSP
Bianbu Linux the bootinfo is generated by a Python script during
the build of u-boot.
With bpif3_gen_binary I extracted and slightly modified this
script and according configuration files to be used independent from the u-boot source tree.
The content of the generated bootinfo is specified in a JSON file and could be modified.
However, currently I do not see a need for that.
FSBL (U-Boot SPL)#
The FSBL (First Stage Boot Loader) is generated by the same script as the bootinfo but requires u-boot-spl.bin at a path
specified in the according JSON configuration file.
While mainline u-boot already has support for the BPI-F3, it only generates a u-boot proper stage
but not a u-boot spl stage.
OpenSBI#
Mainline OpenSBI does not have support for the SpacemiT K1 (yet).
Luckily cyyself already merged support for the SoC into a clean fork of OpenSBI.
With bpif3_opensbi I merged his work
on to the latest version of mainline OpenSBI.
U-Boot#
Mainline u-boot has support for the BPI-F3. It lacks support for the u-boot spl
stage but builds the u-boot proper main stage.