Table of contents
The ESPRESSObin board ships pre-loaded with ARM Trusted Firmware (ATF) + U-Boot as its default bootloader. This page shows how to download and build the bootloader from source. Building the bootloader requires that the toolchain is set up as shown in Build from source - Toolchain.
Prebuilt images
Prebuilt 17.06 and 17.10 release bootloader images for 1GB DDR3, 2GB DDR3, 1GB DDR4 and 2GB DDR4 ESPRESSObin flavors can be found on our Tech Spec page, Software table. If you will be using pre-built images, skip this page and head over to Update the Bootloader page to read how to flash and update the bootloader on your ESPRESSObin board.
U-Boot 2017.03-armada-17.10.1-00489-ge7c0ff4
should be used for the OpenWrt 17.10.
release
Build U-Boot
Clone the u-boot-marvell repository and head into the directory:
$ git clone https://github.com/MarvellEmbeddedProcessors/u-boot-marvell.git $ cd u-boot-marvell
To enable building bootloader images for the new DDR4-supporting ESPRESSObin v7 hardware revision, there are a couple of patches that need to be applied. We will create a new branch named espressobin-v7
that uses a commit from the u-boot-2017.03-armada-17.10
branch as a starting point:
$ git checkout 6a6581a21ec5d6405f30fd41ee5040d64893651b -b espressobin-v7
The archive containing the patches can be downloaded below:
After downloading the archive, extract it with:
$ unzip ebin_v7_u-boot_patches.zip
Apply the patches using the git am
command:
$ git am *.patch
Set up the CROSS_COMPILE
variable:
$ export CROSS_COMPILE=aarch64-linux-gnu-
Now create the .config
file using the mvebu_espressobin-88f3720_defconfig
configuration file:
$ make mvebu_espressobin-88f3720_defconfig
Once the .config
is generated, build the u-boot binary with:
$ make DEVICE_TREE=armada-3720-espressobin
dtc
tool is required to compile the device trees in the u-boot source. If your build machine does not have the dtc tool installed, set up the tool by running sudo apt-get install device-tree-compiler
on the build machine. A successful build will generate a u-boot.bin
binary file in your current directory.
Build ATF
Now we need to set up the environment variable on your build machine to make the u-boot binary as a valid payload for the ARM Trusted Firmware. Adjust the path of the u-boot.bin
binary according to your setup.
$ export BL33=/home/ebin/u-boot/u-boot.bin
sudo apt-get install libssl-dev
to install the openssl headers before starting to build the ATF.
You might also need to install GNU ARM toolchain for building the WTMI binary. On Debian/Ubuntu the default GNU ARM toolchain can be installed using
sudo apt-get install gcc-arm-linux-gnueabi
Now head back and clone the ATF source code repository:
$ cd .. $ git clone https://github.com/MarvellEmbeddedProcessors/atf-marvell.git
There are a couple of patches that need to be applied for the DDR4-supporting ESPRESSObin v7 hardware revision. We will create a new branch named espressobin-v7
that uses a commit from the atf-v1.3-armada-17.10
branch as a starting point:
$ cd atf-marvell $ git checkout 43965481990fd92e9666cf9371a8cf478055ec7c -b espressobin-v7
The archive containing the patches can be downloaded below:
After downloading the archive, extract it with:
$ unzip ebin_v7_atf_patches.zip
Apply the patches using the git am
command:
$ git am *.patch
Building flash images for ESPRESSObin also requires cloning Marvell's A3700-utils repository. Head back a directory and clone the source:
$ cd .. $ git clone https://github.com/MarvellEmbeddedProcessors/A3700-utils-marvell.git $ cd A3700-utils-marvell/
To build flash images for different ESPRESSObin versions and hardware revisions, there are a couple of patches that need to be applied here as well. We will create a new branch named espressobin-v7
that uses a commit from the A3700_utils-armada-17.10
branch as a starting point:
$ git checkout 34ce2160a1521dda9c7c68e06fcde83242dee94a -b espressobin-v7
The archive containing the patches can be downloaded below:
After downloading the archive, extract it with:
$ unzip ebin_v7_a3700-utils_patches.zip
Apply the patches using the git am
command:
$ git am *.patch
The patches enable to build bootloader images for a wide variety of DDR topologies. Some examples will be shown below. Lastly, go back to your ATF directory, from where we will build the bootloader images:
$ cd ../atf-marvell/
Build examples
This section shows several examples of building flash images for various ESPRESSObin flavors. Make sure to change the value of DDR_TOPOLOGY
option according to the DDR flash configuration (DDR3 or DDR4) and the DDR memory size (512MB, 1GB or 2GB) of your ESPRESSObin board. All commands are executed from the root of the ATF repository.
WTP
variable below to point to where you cloned the A3700-utils repository source. - SPINOR ESPRESSObin DDR3 2CS 1GB:
$ make DEBUG=1 USE_COHERENT_MEM=0 LOG_LEVEL=20 SECURE=0 CLOCKSPRESET=CPU_1000_DDR_800 DDR_TOPOLOGY=2 BOOTDEV=SPINOR PARTNUM=0 WTP=../A3700-utils-marvell/ PLAT=a3700 all fip
- SPINOR ESPRESSObin DDR3 2CS 2GB:
$ make DEBUG=1 USE_COHERENT_MEM=0 LOG_LEVEL=20 SECURE=0 CLOCKSPRESET=CPU_1000_DDR_800 DDR_TOPOLOGY=7 BOOTDEV=SPINOR PARTNUM=0 WTP=../A3700-utils-marvell/ PLAT=a3700 all fip
- SPINOR ESPRESSObin DDR4 1CS 1GB:
$ make DEBUG=1 USE_COHERENT_MEM=0 LOG_LEVEL=20 SECURE=0 CLOCKSPRESET=CPU_1000_DDR_800 DDR_TOPOLOGY=5 BOOTDEV=SPINOR PARTNUM=0 WTP=../A3700-utils-marvell/ PLAT=a3700 all fip
- SPINOR ESPRESSObin DDR4 2CS 2GB:
$ make DEBUG=1 USE_COHERENT_MEM=0 LOG_LEVEL=20 SECURE=0 CLOCKSPRESET=CPU_1000_DDR_800 DDR_TOPOLOGY=6 BOOTDEV=SPINOR PARTNUM=0 WTP=../A3700-utils-marvell/ PLAT=a3700 all fip
After the building process is done, the flash-image.bin
bootloader image can be found in the build/a3700/debug/
directory inside the ATF repository:
$ ls build/a3700/debug/ TIM_ATF.bin bl1 bl2 bl31 boot-image.bin fip.bin uart-images wtmi.bin atf-ntim.txt bl1.bin bl2.bin bl31.bin boot-image_h.bin flash-image.bin uart-images.tgz
Now you have your bootloader image flash-image.bin
ready, please refer to the page Update the Bootloader on how to update the ESPRESSObin with the new bootloader image.
UART images
After a successful build, UART images are located in build/a3700/debug/uart-images/
directory:
$ ls build/a3700/debug/uart-images TIM_ATF.bin atf-ntim.txt boot-image_h.bin wtmi_h.bin
See Bootloader recovery via UART on how to recover your bootloader using UART images.
SATA bootloader image
To build SATA bootloader images set the BOOTDEV
variable in the build command to SATA
, for example, to build 1GB DDR3 SATA bootloader image, the command would be:
$ make DEBUG=1 USE_COHERENT_MEM=0 LOG_LEVEL=20 SECURE=0 CLOCKSPRESET=CPU_1000_DDR_800 DDR_TOPOLOGY=2 BOOTDEV=SATA PARTNUM=0 WTP=../a3700-utils/ PLAT=a3700 all fip
See Bootloader recovery via SATA on how to recover your bootloader using SATA bootloader image.