| Marvell U-Boot Build Instructions | |
| ================================= | |
| This document describes how to compile the U-Boot and how to change U-Boot configuration | |
| Build Procedure | |
| ---------------- | |
| 1. Install required packages: | |
| # sudo apt-get install libssl-dev | |
| # sudo apt-get install device-tree-compiler | |
| # sudo apt-get install swig libpython-dev | |
| 2. Set the cross compiler: | |
| # sudo apt-get install gcc-aarch64-linux-gnu | |
| # export CROSS_COMPILE=aarch64-linux-gnu- | |
| 3. Clean-up old residuals: | |
| # make mrproper | |
| 4. Configure the U-Boot: | |
| # make <defconfig_file> | |
| - For the Armada-70x0/80x0 DB board use "mvebu_db_armada8k_defconfig" | |
| - For the Armada-80x0 MacchiatoBin use "make mvebu_mcbin-88f8040_defconfig" | |
| - For the Armada-3700 DB board use "make mvebu_db-88f3720_defconfig" | |
| - For the Armada-3700 EspressoBin use "make mvebu_espressobin-88f3720_defconfig" | |
| 5. Configure the device-tree and build the U-Boot image: | |
| For the Armada-70x0/80x0 DB board compile u-boot and set the required device-tree using: | |
| # make DEVICE_TREE=<name> | |
| NOTE: | |
| Compilation with "mvebu_db_armada8k_defconfig" requires explicitly exporting DEVICE_TREE | |
| for the requested board. | |
| By default, u-boot is compiled with armada-8040-db device-tree. | |
| Using A80x0 device-tree on A70x0 might break the device. | |
| In order to prevent this, the required device-tree MUST be set during compilation. | |
| All device-tree files are located in ./arch/arm/dts/ folder. | |
| For other DB boards (MacchiatoBin, EspressoBin and 3700 DB board) compile u-boot with | |
| just default device-tree from defconfig using: | |
| # make | |
| NOTE: | |
| The u-boot.bin should not be used as a stand-alone image. | |
| The ARM Trusted Firmware (ATF) build process uses this image to generate the | |
| flash image. See TF-A Build Instructions for Marvell Platforms for more details at: | |
| https://trustedfirmware-a.readthedocs.io/en/latest/plat/marvell/armada/build.html | |
| Configuration update | |
| --------------------- | |
| To update the U-Boot configuration, please refer to doc/README.kconfig | |
| Permanent ethernet MAC address | |
| ------------------------------- | |
| Prior flashing new U-Boot version (as part of ATF image) it is suggested to backup | |
| permanent ethernet MAC addresses as they are stored only in U-Boot env storage (SPI or eMMC). | |
| Some boards like EspressoBin have MAC addresses printed on sticker. Some boards got assigned | |
| only one address other may also more than one. To print current MAC addresses run: | |
| # echo $ethaddr | |
| # echo $eth1addr | |
| # echo $eth2addr | |
| # echo $eth3addr | |
| # ... | |
| MAC addresses 00:51:82:11:22:00, 00:51:82:11:22:01, 00:51:82:11:22:02, 00:51:82:11:22:03 | |
| and F0:AD:4E:03:64:7F are default hardcoded values found in Marvell's and Armbian U-Boot | |
| forks and therefore *not* unique. Usage of static hardcoded MAC addresses should be avoided. | |
| When original address is lost (e.g. erased by Armbian boot scripts for EspressoBin) it is | |
| suggested to generate new random one. | |
| After flashing new U-Boot version it is suggested to reset U-Boot env variables to default | |
| and then set correct permanent ethernet MAC addresses. | |
| # env default -a | |
| # setenv ethaddr XX:XX:XX:XX:XX:XX | |
| # setenv eth1addr XX:XX:XX:XX:XX:XX | |
| # setenv eth2addr YY:YY:YY:YY:YY:YY | |
| # setenv eth3addr ZZ:ZZ:ZZ:ZZ:ZZ:ZZ | |
| # ... | |
| # saveenv | |
| Where value for ethaddr is required permanent ethernet MAC address and values for ethNaddr | |
| are optional per-port MAC addresses. When optional ethNaddr variables are not defined then | |
| they are inherited from required ethaddr variable. eth1addr contains MAC address for the | |
| wan port, other for particular lan ports. | |
| Recent Linux kernel versions use correct permanent ethernet MAC address from U-Boot env as | |
| U-Boot will inject it into kernel's device-tree. |