U-Boot on Orange Pi 4
U-Boot used on an Orange Pi 4 which sports an RK3399 processor.
The officially expected compilation environment for most (if not all) of the tools mentioned is an x86_64 machine running Ubuntu (Bionic or Xenial) with a cross-compilation toolchain.
I've tested that with a few tweaks these instructions are usable also on the target device, i.e. ARMv8 machine (running Ubuntu Bionic to be precise).
TODO: THIS PAGE!
TODO: OrangePi RK3399 is different from Orange Pi 4
Tasks:
- add Orange Pi 4 support
- apply patch from Armbian: [2]
- use the new DTS throughout this page
Introduction
See U-Boot for general concepts and definitions.
See ARM Trusted Firmware for ATF / trust related terminology.
Boot Sequence
Rockchip-specific booting is described here: [3]
- Loader 1:
- option 1: miniloader
- option 2: SPL/TPL
- Loader 2:
- option 1: uboot.img
- option 2: u-boot.itb
- trust.img
- boot.img
- rootfs.img
Setup
Build Packages
Arch Linux
- dtc (device tree compiler)
- bc (basic calculator)
TODO: Not complete
Ubuntu
TODO: Not complete
Crosstool
- Binaries for aarch64-linux-gnu: [4]
U-Boot Setup
git clone https://gitlab.denx.de/u-boot/u-boot.git cd u-boot make orangepi-rk3399_defconfig
Option 1: Package the image with Rockchip miniloader
(!) Option 1 (recommended by Rockchip) uses closed source tools and binaries.
rkbin/tools are pre-built x86 binaries and are therefore not usable on the target device. The source code is not available for audit or compilation on a different architecture.
Therefore this is not a usable route.
See u-boot/.../README.rockchip for instructions.
Option 2: Package the image with SPL
Export cross compiler for AArch64
Export cross compiler path for aarch64
- 'wget' the toolchain binaries (see above)
- 'unxz' the archive
- prepare 'CROSS_COMPILE'
- 'cd gcc-linaro-.../bin'
- 'CROSS_COMPILE_AARCH64=`pwd`'
- 'CROSS_COMPILE=$CROSS_COMPILE_AARCH64'
(needed only when not running on the target device)
Compile ATF
=> git clone https://github.com/ARM-software/arm-trusted-firmware.git => cd arm-trusted-firmware (export cross compiler path for Cortex-M0 MCU likely arm-none-eabi-) => make realclean => make CROSS_COMPILE=aarch64-linux-gnu- PLAT=rk3399 (export bl31.elf) => export BL31=/path/to/arm-trusted-firmware/build/rk3399/release/bl31/bl31.elf
Compile PMU M0 firmware
TODO: The internally provided cross-compile toolchain for cortex-m0 seems outdated (it wouldn't compile). Skipping for now.
This is optional for most of the rk3399 boards and required only for Puma board.
=> git clone git://git.theobroma-systems.com/rk3399-cortex-m0.git
=> cd rk3399-cortex-m0
(export cross compiler path for Cortex-M0 PMU)
=> make CROSS_COMPILE=arm-cortex_m0-eabi-
(export rk3399m0.bin)
=> export PMUM0=/path/to/rk3399-cortex-m0/rk3399m0.bin
Compile U-Boot
TODO: orangepi-rk3399_defconfig is close but not the right board!
Needed: LPDD4 RAM CONFIG_RAM_RK3399_LPDDR4=y Failed boot log: U-Boot TPL 2020.04-rc3-00171-g0aadc0786e (Mar 26 2020 - 08:05:33) sdram_init: DDR3 - 666MHz failed! rk3399_dmc_init DRAM init failed -22 Missing DTB
=> cd /path/to/u-boot
=> make orangepi-rk3399_defconfig
=> make
(Get idbloader.img and u-boot.itb)
Booting from an SD card
TODO: Tested with OPi4 until here. Verify the rest.
Flashing with TPL
Write tpl+spl at 64th sector
=> sudo dd if=idbloader.img of=/dev/sdc seek=64
Write U-Boot proper at 16384 sector
=> sudo dd if=u-boot.itb of=/dev/sdc seek=16384
=> sync
Booting
Put this microSD card into your board and reset it. You should see something like:
U-Boot TPL board init Trying to boot from BOOTROM Returning to boot ROM... U-Boot SPL board init Trying to boot from MMC1 U-Boot 2019.07-rc1-00241-g5b3244767a (May 08 2019 - 10:51:06 +0530) Model: Orange Pi RK3399 Board DRAM: 2 GiB MMC: dwmmc@fe310000: 2, dwmmc@fe320000: 1, sdhci@fe330000: 0 Loading Environment from MMC... OK In: serial@ff1a0000 Out: serial@ff1a0000 Err: serial@ff1a0000 Model: Orange Pi RK3399 Board Net: eth0: ethernet@fe300000 Hit any key to stop autoboot: 0 =>
Related
External Links
- Main resource: gitlab.denx.de/.../README.rockchip
- Rockchip ATF wiki: [5]
- ATF repository: [6]