127a50c86SAndy Yan#!/bin/sh 2cd7ae718SJoseph Chenset -e 327a50c86SAndy YanBOARD=$1 4b6255198SJoseph ChenSUBCMD=$1 553ea5791SJoseph ChenFUNCADDR=$1 627a50c86SAndy YanJOB=`sed -n "N;/processor/p" /proc/cpuinfo|wc -l` 7b6255198SJoseph ChenSUPPORT_LIST=`ls configs/*[r,p][x,v,k][0-9][0-9]*_defconfig` 827a50c86SAndy Yan 9fb90bd1dSJoseph Chen########################################### User can modify ############################################# 10fb90bd1dSJoseph Chen# User's rkbin tool relative path 11bc98b3c8SJoseph ChenRKBIN_TOOLS=../rkbin/tools 12bc98b3c8SJoseph Chen 13fb90bd1dSJoseph Chen# User's GCC toolchain and relative path 1453ea5791SJoseph ChenADDR2LINE_ARM32=arm-linux-gnueabihf-addr2line 1553ea5791SJoseph ChenADDR2LINE_ARM64=aarch64-linux-gnu-addr2line 16fb90bd1dSJoseph ChenOBJ_ARM32=arm-linux-gnueabihf-objdump 17fb90bd1dSJoseph ChenOBJ_ARM64=aarch64-linux-gnu-objdump 18d8540eacSJoseph ChenGCC_ARM32=arm-linux-gnueabihf- 19d8540eacSJoseph ChenGCC_ARM64=aarch64-linux-gnu- 20d8540eacSJoseph ChenTOOLCHAIN_ARM32=../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin 21d8540eacSJoseph ChenTOOLCHAIN_ARM64=../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin 22fb90bd1dSJoseph Chen 23fb90bd1dSJoseph Chen########################################### User not touch ############################################# 24d443b7d5SJoseph Chen# Declare global INI file searching index name for every chip, update in fixup_platform_configure() 25d443b7d5SJoseph ChenRKCHIP= 26d443b7d5SJoseph Chen 27fb90bd1dSJoseph Chen# Declare global rkbin RKTOOLS and rkbin repository path, updated in prepare() 28fb90bd1dSJoseph ChenRKTOOLS= 29fb90bd1dSJoseph ChenRKBIN= 30fb90bd1dSJoseph Chen 31fb90bd1dSJoseph Chen# Declare global toolchain path for CROSS_COMPILE, updated in select_toolchain() 32fb90bd1dSJoseph ChenTOOLCHAIN_GCC= 33fb90bd1dSJoseph ChenTOOLCHAIN_OBJDUMP= 3453ea5791SJoseph ChenTOOLCHAIN_ADDR2LINE= 35fb90bd1dSJoseph Chen 36fb90bd1dSJoseph Chen# Declare global default output dir and cmd, update in prepare() 37b6255198SJoseph ChenOUTDIR=$2 38fb90bd1dSJoseph ChenOUTOPT= 39bc98b3c8SJoseph Chen 4041cf5e5aSJoseph Chen# Declare global plaform configure, updated in fixup_platform_configure() 4141cf5e5aSJoseph ChenPLATFORM_RSA= 4241cf5e5aSJoseph ChenPLATFORM_SHA= 4341cf5e5aSJoseph ChenPLATFORM_UBOOT_IMG_SIZE= 4441cf5e5aSJoseph ChenPLATFORM_TRUST_IMG_SIZE= 4541cf5e5aSJoseph ChenPLATFORM_AARCH32= 46fb90bd1dSJoseph Chen######################################################################################################### 47b6255198SJoseph Chenhelp() 48b6255198SJoseph Chen{ 49b6255198SJoseph Chen echo 50b6255198SJoseph Chen echo "Usage: ./make.sh [board|subcmd] [O=<dir>]" 51b6255198SJoseph Chen echo 52b6255198SJoseph Chen echo "Example:" 53b6255198SJoseph Chen echo 54b6255198SJoseph Chen echo "1. Build:" 55b6255198SJoseph Chen echo " ./make.sh evb-rk3399 ---- build for evb-rk3399_defconfig" 56b6255198SJoseph Chen echo " ./make.sh evb-rk3399 O=rockdev ---- build for evb-rk3399_defconfig with output dir "./rockdev"" 57b6255198SJoseph Chen echo " ./make.sh firefly-rk3288 ---- build for firefly-rk3288_defconfig" 58b6255198SJoseph Chen echo " ./make.sh ---- build with exist .config" 59b6255198SJoseph Chen echo 60b6255198SJoseph Chen echo " After build, images of uboot, loader and trust are all generated." 61b6255198SJoseph Chen echo 62b6255198SJoseph Chen echo "2. Subcmd helper:" 63b6255198SJoseph Chen echo " ./make.sh trust --- pack trust.img without rebuild project" 64b6255198SJoseph Chen echo " ./make.sh loader --- pack loader bin without rebuild project" 65b6255198SJoseph Chen echo " ./make.sh uboot --- pack uboot.img without rebuild project" 66b6255198SJoseph Chen echo 67b6255198SJoseph Chen echo "3. Debug helper:" 68b6255198SJoseph Chen echo " ./make.sh elf --- dump elf file with -D(default)" 69b6255198SJoseph Chen echo " ./make.sh elf-S --- dump elf file with -S" 7053ea5791SJoseph Chen echo " ./make.sh <addr> --- dump function name and code position of address" 71b6255198SJoseph Chen echo " ./make.sh map --- cat u-boot.map" 72b6255198SJoseph Chen echo " ./make.sh sym --- cat u-boot.sym" 73b6255198SJoseph Chen} 7441cf5e5aSJoseph Chen 75cd7ae718SJoseph Chenprepare() 76cd7ae718SJoseph Chen{ 77b6255198SJoseph Chen local absolute_path cmd dir count 7830b04afcSJoseph Chen 7953ea5791SJoseph Chen # Parse output directory 'O=<dir>' 80b6255198SJoseph Chen cmd=${OUTDIR%=*} 8130b04afcSJoseph Chen if [ "${cmd}" = 'O' ]; then 82b6255198SJoseph Chen OUTDIR=${OUTDIR#*=} 8330b04afcSJoseph Chen OUTOPT=O=${OUTDIR} 8430b04afcSJoseph Chen else 85b6255198SJoseph Chen case $BOARD in 8653ea5791SJoseph Chen # Parse from exit .config 87*5c75ab41SJoseph Chen ''|elf*|loader*|trust|uboot|map|sym) 88b6255198SJoseph Chen count=`find -name .config | wc -l` 89b6255198SJoseph Chen dir=`find -name .config` 9053ea5791SJoseph Chen # Good, find only one .config 91b6255198SJoseph Chen if [ $count -eq 1 ]; then 92b6255198SJoseph Chen dir=${dir%/*} 93b6255198SJoseph Chen OUTDIR=${dir#*/} 9453ea5791SJoseph Chen # Set OUTOPT if not current directory 95b6255198SJoseph Chen if [ $OUTDIR != '.' ]; then 96b6255198SJoseph Chen OUTOPT=O=${OUTDIR} 97b6255198SJoseph Chen fi 98b6255198SJoseph Chen elif [ $count -eq 0 ]; then 99b6255198SJoseph Chen echo 100b6255198SJoseph Chen echo "Build failed, Can't find .config" 101b6255198SJoseph Chen help 102b6255198SJoseph Chen exit 1 103b6255198SJoseph Chen else 104b6255198SJoseph Chen echo 105b6255198SJoseph Chen echo "Build failed, find $count '.config': " 106b6255198SJoseph Chen echo "$dir" 107b6255198SJoseph Chen echo "Please leave only one of them" 108b6255198SJoseph Chen exit 1 109b6255198SJoseph Chen fi 110b6255198SJoseph Chen ;; 111b6255198SJoseph Chen 112b6255198SJoseph Chen *) 11330b04afcSJoseph Chen OUTDIR=. 114b6255198SJoseph Chen ;; 115b6255198SJoseph Chen esac 11630b04afcSJoseph Chen fi 117cd7ae718SJoseph Chen 118b6255198SJoseph Chen # Parse help and make defconfig 119b6255198SJoseph Chen case $BOARD in 12053ea5791SJoseph Chen #Help 121b6255198SJoseph Chen --help|-help|help|--h|-h) 122b6255198SJoseph Chen help 123b6255198SJoseph Chen exit 0 124b6255198SJoseph Chen ;; 12553ea5791SJoseph Chen 12653ea5791SJoseph Chen #Subcmd 127*5c75ab41SJoseph Chen ''|elf*|loader*|trust|uboot|map|sym) 128b6255198SJoseph Chen ;; 129b6255198SJoseph Chen 130b6255198SJoseph Chen *) 13153ea5791SJoseph Chen #Func address is valid ? 13253ea5791SJoseph Chen if [ -z $(echo ${FUNCADDR} | sed 's/[0-9,a-f,A-F]//g') ]; then 13353ea5791SJoseph Chen return 13453ea5791SJoseph Chen elif [ ! -f configs/${BOARD}_defconfig ]; then 13530b04afcSJoseph Chen echo 136cd7ae718SJoseph Chen echo "Can't find: configs/${BOARD}_defconfig" 1377c19369dSJoseph Chen echo 13830b04afcSJoseph Chen echo "******** Rockchip Support List *************" 13930b04afcSJoseph Chen echo "${SUPPORT_LIST}" 1407c19369dSJoseph Chen echo "********************************************" 1417c19369dSJoseph Chen echo 142cd7ae718SJoseph Chen exit 1 143b6255198SJoseph Chen else 144b6255198SJoseph Chen echo "make for ${BOARD}_defconfig by -j${JOB}" 145b6255198SJoseph Chen make ${BOARD}_defconfig ${OUTOPT} 146cd7ae718SJoseph Chen fi 147b6255198SJoseph Chen ;; 148b6255198SJoseph Chen esac 149cd7ae718SJoseph Chen 150fb90bd1dSJoseph Chen # Initialize RKBIN and RKTOOLS 151bc98b3c8SJoseph Chen if [ -d ${RKBIN_TOOLS} ]; then 152bc98b3c8SJoseph Chen absolute_path=$(cd `dirname ${RKBIN_TOOLS}`; pwd) 153bc98b3c8SJoseph Chen RKBIN=${absolute_path} 154fb90bd1dSJoseph Chen RKTOOLS=${absolute_path}/tools 155cd7ae718SJoseph Chen else 156cd7ae718SJoseph Chen echo 157fb90bd1dSJoseph Chen echo "Can't find '../rkbin/' repository, please download it before pack image!" 158cd7ae718SJoseph Chen echo "How to obtain? 3 ways:" 159fb90bd1dSJoseph Chen echo " 1. Login your Rockchip gerrit account: \"Projects\" -> \"List\" -> search \"rk/rkbin\" repository" 160fb90bd1dSJoseph Chen echo " 2. Github repository: https://github.com/rockchip-linux/rkbin" 161fb90bd1dSJoseph Chen echo " 3. Download full release SDK repository" 162cd7ae718SJoseph Chen exit 1 163cd7ae718SJoseph Chen fi 16430b04afcSJoseph Chen} 1657c2526e9SJoseph Chen 16627a50c86SAndy Yanselect_toolchain() 16727a50c86SAndy Yan{ 168bc98b3c8SJoseph Chen local absolute_path 169bc98b3c8SJoseph Chen 170366bd23fSJoseph Chen if grep -q '^CONFIG_ARM64=y' ${OUTDIR}/.config ; then 171bc98b3c8SJoseph Chen if [ -d ${TOOLCHAIN_ARM64} ]; then 172bc98b3c8SJoseph Chen absolute_path=$(cd `dirname ${TOOLCHAIN_ARM64}`; pwd) 173bc98b3c8SJoseph Chen TOOLCHAIN_GCC=${absolute_path}/bin/${GCC_ARM64} 1740ff0e214SJoseph Chen TOOLCHAIN_OBJDUMP=${absolute_path}/bin/${OBJ_ARM64} 17553ea5791SJoseph Chen TOOLCHAIN_ADDR2LINE=${absolute_path}/bin/${ADDR2LINE_ARM64} 176bc98b3c8SJoseph Chen else 177366bd23fSJoseph Chen echo "Can't find toolchain: ${TOOLCHAIN_ARM64}" 178bc98b3c8SJoseph Chen exit 1 17927a50c86SAndy Yan fi 18027a50c86SAndy Yan else 181bc98b3c8SJoseph Chen if [ -d ${TOOLCHAIN_ARM32} ]; then 182bc98b3c8SJoseph Chen absolute_path=$(cd `dirname ${TOOLCHAIN_ARM32}`; pwd) 183bc98b3c8SJoseph Chen TOOLCHAIN_GCC=${absolute_path}/bin/${GCC_ARM32} 1840ff0e214SJoseph Chen TOOLCHAIN_OBJDUMP=${absolute_path}/bin/${OBJ_ARM32} 18553ea5791SJoseph Chen TOOLCHAIN_ADDR2LINE=${absolute_path}/bin/${ADDR2LINE_ARM32} 186bc98b3c8SJoseph Chen else 187366bd23fSJoseph Chen echo "Can't find toolchain: ${TOOLCHAIN_ARM32}" 188bc98b3c8SJoseph Chen exit 1 18927a50c86SAndy Yan fi 19027a50c86SAndy Yan fi 191bc98b3c8SJoseph Chen 19253ea5791SJoseph Chen # echo "toolchain: ${TOOLCHAIN_GCC}" 193bc98b3c8SJoseph Chen} 194bc98b3c8SJoseph Chen 1950ff0e214SJoseph Chensub_commands() 1960ff0e214SJoseph Chen{ 197*5c75ab41SJoseph Chen local cmd=${SUBCMD%-*} opt=${SUBCMD#*-} 1980ff0e214SJoseph Chen 199b6255198SJoseph Chen case $cmd in 200b6255198SJoseph Chen elf) 201366bd23fSJoseph Chen if [ ! -f ${OUTDIR}/u-boot ]; then 202366bd23fSJoseph Chen echo "Can't find elf file: ${OUTDIR}/u-boot" 2030ff0e214SJoseph Chen exit 1 2040ff0e214SJoseph Chen else 205b6255198SJoseph Chen # default 'cmd' without option, use '-D' 206*5c75ab41SJoseph Chen if [ "${cmd}" = 'elf' -a "${opt}" = 'elf' ]; then 207*5c75ab41SJoseph Chen opt=D 2080ff0e214SJoseph Chen fi 209*5c75ab41SJoseph Chen ${TOOLCHAIN_OBJDUMP} -${opt} ${OUTDIR}/u-boot | less 21007de173aSJoseph Chen exit 0 21107de173aSJoseph Chen fi 212b6255198SJoseph Chen ;; 213b6255198SJoseph Chen 214b6255198SJoseph Chen map) 215b6255198SJoseph Chen cat ${OUTDIR}/u-boot.map | less 216b6255198SJoseph Chen exit 0 217b6255198SJoseph Chen ;; 218b6255198SJoseph Chen 219b6255198SJoseph Chen sym) 220b6255198SJoseph Chen cat ${OUTDIR}/u-boot.sym | less 221b6255198SJoseph Chen exit 0 222b6255198SJoseph Chen ;; 223b6255198SJoseph Chen 224b6255198SJoseph Chen trust) 225a43a18b2SJoseph Chen pack_trust_image 226a43a18b2SJoseph Chen exit 0 227b6255198SJoseph Chen ;; 228b6255198SJoseph Chen 229b6255198SJoseph Chen loader) 230*5c75ab41SJoseph Chen pack_loader_image ${opt} 231a43a18b2SJoseph Chen exit 0 232b6255198SJoseph Chen ;; 233b6255198SJoseph Chen 234b6255198SJoseph Chen uboot) 235fb90bd1dSJoseph Chen pack_uboot_image 236fb90bd1dSJoseph Chen exit 0 237b6255198SJoseph Chen ;; 238b6255198SJoseph Chen 239b6255198SJoseph Chen *) 24053ea5791SJoseph Chen # Search function and code position of address 24153ea5791SJoseph Chen if [ -z $(echo ${FUNCADDR} | sed 's/[0-9,a-f,A-F]//g') ] && [ ${FUNCADDR} ]; then 24253ea5791SJoseph Chen echo 24353ea5791SJoseph Chen sed -n "/${FUNCADDR}/p" ${OUTDIR}/u-boot.sym 24453ea5791SJoseph Chen ${TOOLCHAIN_ADDR2LINE} -e ${OUTDIR}/u-boot ${FUNCADDR} 24553ea5791SJoseph Chen exit 0 24653ea5791SJoseph Chen fi 247b6255198SJoseph Chen ;; 248b6255198SJoseph Chen esac 2490ff0e214SJoseph Chen} 2500ff0e214SJoseph Chen 251fb90bd1dSJoseph Chen# Support platform special configure 252fb90bd1dSJoseph Chen# 1. fixup chip name; 253fb90bd1dSJoseph Chen# 2. fixup pack mode; 254fb90bd1dSJoseph Chen# 3. fixup image size 255fb90bd1dSJoseph Chen# 4. fixup ARM64 cpu boot with AArch32 25641cf5e5aSJoseph Chenfixup_platform_configure() 257bc98b3c8SJoseph Chen{ 258d443b7d5SJoseph Chen local count plat 259d443b7d5SJoseph Chen 260d443b7d5SJoseph Chen# <1> Get RKCHIP for searching trust/loader ini files 261d443b7d5SJoseph Chen count=`grep -c '^CONFIG_ROCKCHIP_[R,P][X,V,K][0-9][0-9]' ${OUTDIR}/.config` 262d443b7d5SJoseph Chen RKCHIP=`grep '^CONFIG_ROCKCHIP_[R,P][X,V,K][0-9][0-9]' ${OUTDIR}/.config` 263d443b7d5SJoseph Chen 264d443b7d5SJoseph Chen if [ $count -eq 1 ]; then 265d443b7d5SJoseph Chen RKCHIP=${RKCHIP%=*} 266d443b7d5SJoseph Chen RKCHIP=${RKCHIP##*_} 267d443b7d5SJoseph Chen elif [ $count -gt 1 ]; then 268d443b7d5SJoseph Chen # Is RK3126 ? 269d443b7d5SJoseph Chen plat=`grep '^CONFIG_ROCKCHIP_[R,P][X,V,K][0-9][0-9]' ${OUTDIR}/.config | sed -n "/CONFIG_ROCKCHIP_RK3126=y/p"` 270d443b7d5SJoseph Chen if [ "$plat" = 'CONFIG_ROCKCHIP_RK3126=y' ]; then 271d443b7d5SJoseph Chen RKCHIP=RK3126 272d443b7d5SJoseph Chen fi 273d443b7d5SJoseph Chen # Is RK3326 ? 274d443b7d5SJoseph Chen plat=`grep '^CONFIG_ROCKCHIP_[R,P][X,V,K][0-9][0-9]' ${OUTDIR}/.config | sed -n "/CONFIG_ROCKCHIP_RK3326=y/p"` 275d443b7d5SJoseph Chen if [ "$plat" = 'CONFIG_ROCKCHIP_RK3326=y' ]; then 276d443b7d5SJoseph Chen RKCHIP=RK3326 277d443b7d5SJoseph Chen fi 278d443b7d5SJoseph Chen else 279d443b7d5SJoseph Chen echo "Can't get Rockchip SoC definition in .config" 280d443b7d5SJoseph Chen exit 1 281bc98b3c8SJoseph Chen fi 28241cf5e5aSJoseph Chen 28341cf5e5aSJoseph Chen# <2> Fixup rsa/sha pack mode for platforms 28441cf5e5aSJoseph Chen # RK3308/PX30/RK3326 use RSA-PKCS1 V2.1, it's pack magic is "3" 28541cf5e5aSJoseph Chen if [ $RKCHIP = "PX30" -o $RKCHIP = "RK3326" -o $RKCHIP = "RK3308" ]; then 28641cf5e5aSJoseph Chen PLATFORM_RSA="--rsa 3" 28741cf5e5aSJoseph Chen # RK3368 use rk big endian SHA256, it's pack magic is "2" 28841cf5e5aSJoseph Chen elif [ $RKCHIP = "RK3368" ]; then 28941cf5e5aSJoseph Chen PLATFORM_SHA="--sha 2" 29041cf5e5aSJoseph Chen # other platforms use default configure 29141cf5e5aSJoseph Chen fi 29241cf5e5aSJoseph Chen 29341cf5e5aSJoseph Chen# <3> Fixup images size pack for platforms 29441cf5e5aSJoseph Chen if [ $RKCHIP = "RK3308" ]; then 29541cf5e5aSJoseph Chen if grep -q '^CONFIG_ARM64_BOOT_AARCH32=y' ${OUTDIR}/.config ; then 29641cf5e5aSJoseph Chen PLATFORM_UBOOT_IMG_SIZE="--size 512 2" 29741cf5e5aSJoseph Chen PLATFORM_TRUST_IMG_SIZE="--size 512 2" 29841cf5e5aSJoseph Chen else 29941cf5e5aSJoseph Chen PLATFORM_UBOOT_IMG_SIZE="--size 1024 2" 30041cf5e5aSJoseph Chen PLATFORM_TRUST_IMG_SIZE="--size 1024 2" 30141cf5e5aSJoseph Chen fi 30241cf5e5aSJoseph Chen fi 30341cf5e5aSJoseph Chen 30441cf5e5aSJoseph Chen# <4> Fixup PLATFORM_AARCH32 for ARM64 cpu platforms 30541cf5e5aSJoseph Chen if [ $RKCHIP = "RK3308" ]; then 30641cf5e5aSJoseph Chen if grep -q '^CONFIG_ARM64_BOOT_AARCH32=y' ${OUTDIR}/.config ; then 30741cf5e5aSJoseph Chen PLATFORM_AARCH32="AARCH32" 30841cf5e5aSJoseph Chen fi 30941cf5e5aSJoseph Chen fi 31027a50c86SAndy Yan} 311de9a6cd2SJoseph Chen 312cd7ae718SJoseph Chenpack_uboot_image() 313de9a6cd2SJoseph Chen{ 314cd7ae718SJoseph Chen local UBOOT_LOAD_ADDR 315de9a6cd2SJoseph Chen 316366bd23fSJoseph Chen UBOOT_LOAD_ADDR=`sed -n "/CONFIG_SYS_TEXT_BASE=/s/CONFIG_SYS_TEXT_BASE=//p" ${OUTDIR}/include/autoconf.mk|tr -d '\r'` 317fb90bd1dSJoseph Chen ${RKTOOLS}/loaderimage --pack --uboot ${OUTDIR}/u-boot.bin uboot.img ${UBOOT_LOAD_ADDR} ${PLATFORM_UBOOT_IMG_SIZE} 3187c19369dSJoseph Chen 319fb90bd1dSJoseph Chen # Delete u-boot.img and u-boot-dtb.img, which makes users not be confused with final uboot.img 3207c19369dSJoseph Chen if [ -f ${OUTDIR}/u-boot.img ]; then 3217c19369dSJoseph Chen rm ${OUTDIR}/u-boot.img 3227c19369dSJoseph Chen fi 3237c19369dSJoseph Chen 3247c19369dSJoseph Chen if [ -f ${OUTDIR}/u-boot-dtb.img ]; then 3257c19369dSJoseph Chen rm ${OUTDIR}/u-boot-dtb.img 3267c19369dSJoseph Chen fi 3277c19369dSJoseph Chen 328366bd23fSJoseph Chen echo "pack uboot okay! Input: ${OUTDIR}/u-boot.bin" 329de9a6cd2SJoseph Chen} 330de9a6cd2SJoseph Chen 331cd7ae718SJoseph Chenpack_loader_image() 332cd7ae718SJoseph Chen{ 333*5c75ab41SJoseph Chen local mode=$1 files ini 334d9d90a73SJoseph Chen 33580fb8d2cSShunqian Zheng if [ ! -f ${RKBIN}/RKBOOT/${RKCHIP}MINIALL.ini ]; then 33680fb8d2cSShunqian Zheng echo "pack loader failed! Can't find: ${RKBIN}/RKBOOT/${RKCHIP}MINIALL.ini" 33751441a28SJoseph Chen return 33851441a28SJoseph Chen fi 33951441a28SJoseph Chen 340cd7ae718SJoseph Chen cd ${RKBIN} 341*5c75ab41SJoseph Chen 342*5c75ab41SJoseph Chen if [ "${mode}" = 'all' ]; then 343d9d90a73SJoseph Chen files=`ls ${RKBIN}/RKBOOT/${RKCHIP}MINIALL*.ini` 344d9d90a73SJoseph Chen for ini in $files 345d9d90a73SJoseph Chen do 346d9d90a73SJoseph Chen if [ -f "$ini" ]; then 347d9d90a73SJoseph Chen ${RKTOOLS}/boot_merger --replace tools/rk_tools/ ./ $ini 348d9d90a73SJoseph Chen echo "pack loader okay! Input: $ini" 349d9d90a73SJoseph Chen fi 350d9d90a73SJoseph Chen done 351*5c75ab41SJoseph Chen else 352*5c75ab41SJoseph Chen ${RKTOOLS}/boot_merger --replace tools/rk_tools/ ./ ${RKBIN}/RKBOOT/${RKCHIP}MINIALL.ini 353*5c75ab41SJoseph Chen echo "pack loader okay! Input: ${RKBIN}/RKBOOT/${RKCHIP}MINIALL.ini" 354*5c75ab41SJoseph Chen fi 355d9d90a73SJoseph Chen 356fb90bd1dSJoseph Chen cd - && mv ${RKBIN}/*_loader_*.bin ./ 357cd7ae718SJoseph Chen} 358cd7ae718SJoseph Chen 359cd7ae718SJoseph Chenpack_trust_image() 360cd7ae718SJoseph Chen{ 36141cf5e5aSJoseph Chen local TOS TOS_TA DARM_BASE TEE_LOAD_ADDR TEE_OFFSET=0x8400000 362cd7ae718SJoseph Chen 363cd7ae718SJoseph Chen # ARM64 uses trust_merger 364fa400ae5SJoseph Chen if grep -Eq ''^CONFIG_ARM64=y'|'^CONFIG_ARM64_BOOT_AARCH32=y'' ${OUTDIR}/.config ; then 36541cf5e5aSJoseph Chen if [ ! -f ${RKBIN}/RKTRUST/${RKCHIP}${PLATFORM_AARCH32}TRUST.ini ]; then 36641cf5e5aSJoseph Chen echo "pack trust failed! Can't find: ${RKBIN}/RKTRUST/${RKCHIP}${PLATFORM_AARCH32}TRUST.ini" 36751441a28SJoseph Chen return 36851441a28SJoseph Chen fi 36951441a28SJoseph Chen 370cd7ae718SJoseph Chen cd ${RKBIN} 371fb90bd1dSJoseph Chen ${RKTOOLS}/trust_merger ${PLATFORM_SHA} ${PLATFORM_RSA} ${PLATFORM_TRUST_IMG_SIZE} --replace tools/rk_tools/ ./ ${RKBIN}/RKTRUST/${RKCHIP}${PLATFORM_AARCH32}TRUST.ini 372e5e978b3SJoseph Chen 373fb90bd1dSJoseph Chen cd - && mv ${RKBIN}/trust.img ./trust.img 37441cf5e5aSJoseph Chen echo "pack trust okay! Input: ${RKBIN}/RKTRUST/${RKCHIP}${PLATFORM_AARCH32}TRUST.ini" 375cd7ae718SJoseph Chen # ARM uses loaderimage 376cd7ae718SJoseph Chen else 37780fb8d2cSShunqian Zheng if [ ! -f ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini ]; then 37880fb8d2cSShunqian Zheng echo "pack trust failed! Can't find: ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini" 37951441a28SJoseph Chen return 38051441a28SJoseph Chen fi 38151441a28SJoseph Chen 382cd7ae718SJoseph Chen # OP-TEE is 132M(0x8400000) offset from DRAM base. 383366bd23fSJoseph Chen DARM_BASE=`sed -n "/CONFIG_SYS_SDRAM_BASE=/s/CONFIG_SYS_SDRAM_BASE=//p" ${OUTDIR}/include/autoconf.mk|tr -d '\r'` 384cd7ae718SJoseph Chen TEE_LOAD_ADDR=$((DARM_BASE+TEE_OFFSET)) 385cd7ae718SJoseph Chen 386cd7ae718SJoseph Chen # Convert Dec to Hex 387cd7ae718SJoseph Chen TEE_LOAD_ADDR=$(echo "obase=16;${TEE_LOAD_ADDR}"|bc) 388cd7ae718SJoseph Chen 3890e90839aSJoseph Chen # Parse orignal path 39080fb8d2cSShunqian Zheng TOS=`sed -n "/TOS=/s/TOS=//p" ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini|tr -d '\r'` 39180fb8d2cSShunqian Zheng TOS_TA=`sed -n "/TOSTA=/s/TOSTA=//p" ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini|tr -d '\r'` 392cd7ae718SJoseph Chen 3930e90839aSJoseph Chen # replace "./tools/rk_tools/" with "./" to compatible legacy ini content of rkdevelop branch 3940e90839aSJoseph Chen TOS=$(echo ${TOS} | sed "s/tools\/rk_tools\//\.\//g") 3950e90839aSJoseph Chen TOS_TA=$(echo ${TOS_TA} | sed "s/tools\/rk_tools\//\.\//g") 3960e90839aSJoseph Chen 397a64486b5SJoseph Chen if [ $TOS_TA -a $TOS ]; then 398fb90bd1dSJoseph Chen ${RKTOOLS}/loaderimage --pack --trustos ${RKBIN}/${TOS} ./trust.img ${TEE_LOAD_ADDR} ${PLATFORM_TRUST_IMG_SIZE} 399fb90bd1dSJoseph Chen ${RKTOOLS}/loaderimage --pack --trustos ${RKBIN}/${TOS_TA} ./trust_with_ta.img ${TEE_LOAD_ADDR} ${PLATFORM_TRUST_IMG_SIZE} 400cd7ae718SJoseph Chen echo "Both trust.img and trust_with_ta.img are ready" 401cd7ae718SJoseph Chen elif [ $TOS ]; then 402fb90bd1dSJoseph Chen ${RKTOOLS}/loaderimage --pack --trustos ${RKBIN}/${TOS} ./trust.img ${TEE_LOAD_ADDR} ${PLATFORM_TRUST_IMG_SIZE} 403cd7ae718SJoseph Chen echo "trust.img is ready" 404cd7ae718SJoseph Chen elif [ $TOS_TA ]; then 405fb90bd1dSJoseph Chen ${RKTOOLS}/loaderimage --pack --trustos ${RKBIN}/${TOS_TA} ./trust.img ${TEE_LOAD_ADDR} ${PLATFORM_TRUST_IMG_SIZE} 406cd7ae718SJoseph Chen echo "trust.img with ta is ready" 407cd7ae718SJoseph Chen else 408a64486b5SJoseph Chen echo "Can't find any tee bin" 409a64486b5SJoseph Chen exit 1 410cd7ae718SJoseph Chen fi 41151441a28SJoseph Chen 41280fb8d2cSShunqian Zheng echo "pack trust okay! Input: ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini" 413cd7ae718SJoseph Chen fi 414cd7ae718SJoseph Chen} 415cd7ae718SJoseph Chen 41630b04afcSJoseph Chenfinish() 41730b04afcSJoseph Chen{ 41830b04afcSJoseph Chen echo 41930b04afcSJoseph Chen if [ "$BOARD" = '' ]; then 420d443b7d5SJoseph Chen echo "Platform ${RKCHIP}${PLATFORM_AARCH32} is build OK, with exist .config" 42130b04afcSJoseph Chen else 422d443b7d5SJoseph Chen echo "Platform ${RKCHIP}${PLATFORM_AARCH32} is build OK, with new .config(make ${BOARD}_defconfig)" 42330b04afcSJoseph Chen fi 42430b04afcSJoseph Chen} 42530b04afcSJoseph Chen 426cd7ae718SJoseph Chenprepare 4277c2526e9SJoseph Chenselect_toolchain 42841cf5e5aSJoseph Chenfixup_platform_configure 4290ff0e214SJoseph Chensub_commands 430366bd23fSJoseph Chenmake CROSS_COMPILE=${TOOLCHAIN_GCC} all --jobs=${JOB} ${OUTOPT} 431cd7ae718SJoseph Chenpack_uboot_image 432d93242f2SJoseph Chenpack_loader_image 433cd7ae718SJoseph Chenpack_trust_image 43430b04afcSJoseph Chenfinish 435