Download ARM Trusted Firmware
Rockchip do not provide the ATF source code, you can find the ATF binaries in rkbin repository.
Get the source code from github:
git clone https://github.com/ARM-software/arm-trusted-firmware.git
Upstream ARM Trusted Firmware support Rockchip SoCs:
Here is a mk-atf.sh script to build ATF.
$ cat mk-atf.sh #!/bin/bash make realclean CFLAGS='-gdwarf-2' \ CROSS_COMPILE=aarch64-linux-gnu- \ make PLAT=rk3399 DEBUG=0 ERROR_DEPRECATED=1 bl31
Because there is a blob of code for cortex-M0 in rk3399 ATF, so you need a compiler for it. Install it by:
sudo apt-get install gcc-arm-none-eabi
We can get bl31.elf
bl31.bin when build completed.
Note: The latest version ATF(including rockchip version and upstream version) bl31.elf instead of bl31.bin, the bl31.bin is not available now.
Using U-Boot SPL FIT image
Copy the trust binary(optee.bin or bl31.elf) to u-boot root directory and rename it to tee.bin(armv7) or bl31.elf(armv8). Use below command to get u-boot.itb.
The output u-boot.itb is a its based package including u-boot-nodtb.bin, board.dtb, and trust binaries which can be load by SPL.
Using Rockchip miniloader
Alternatively, you can use Rockchip miniloader and U-Boot instead which do not need SPL.
The ATF is loaded by miniloader, so it should be package to known format for miniloader
trust_merger rk_tools/RKTRUST/RK3399TRUST.ini trust.img
According to the partitions definition, write trust.img to offset 0x6000.