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 50*6a764259SJoseph Chen echo "Usage:" 51*6a764259SJoseph Chen echo " ./make.sh [board|subcmd] [O=<dir>]" 52*6a764259SJoseph Chen echo 53*6a764259SJoseph Chen echo " - board: board name of defconfig" 54*6a764259SJoseph Chen echo " - subcmd: loader|loader-all|trust|uboot|elf|map|sym|<addr>|" 55*6a764259SJoseph Chen echo " - O=<dir>: assigned output directory" 56b6255198SJoseph Chen echo 57b6255198SJoseph Chen echo "Example:" 58b6255198SJoseph Chen echo 59*6a764259SJoseph Chen echo "1. Build board:" 60b6255198SJoseph Chen echo " ./make.sh evb-rk3399 ---- build for evb-rk3399_defconfig" 61b6255198SJoseph Chen echo " ./make.sh evb-rk3399 O=rockdev ---- build for evb-rk3399_defconfig with output dir "./rockdev"" 62b6255198SJoseph Chen echo " ./make.sh firefly-rk3288 ---- build for firefly-rk3288_defconfig" 63b6255198SJoseph Chen echo " ./make.sh ---- build with exist .config" 64b6255198SJoseph Chen echo 65b6255198SJoseph Chen echo " After build, images of uboot, loader and trust are all generated." 66b6255198SJoseph Chen echo 67*6a764259SJoseph Chen echo "2. Pack helper:" 68*6a764259SJoseph Chen echo " ./make.sh trust --- pack trust.img" 69*6a764259SJoseph Chen echo " ./make.sh uboot --- pack uboot.img" 70*6a764259SJoseph Chen echo " ./make.sh loader --- pack loader bin" 71*6a764259SJoseph Chen echo " ./make.sh loader-all --- pack loader bin (all supported loaders)" 72b6255198SJoseph Chen echo 73b6255198SJoseph Chen echo "3. Debug helper:" 74b6255198SJoseph Chen echo " ./make.sh elf --- dump elf file with -D(default)" 75b6255198SJoseph Chen echo " ./make.sh elf-S --- dump elf file with -S" 76*6a764259SJoseph Chen echo " ./make.sh elf-d --- dump elf file with -d" 77*6a764259SJoseph Chen echo " ./make.sh <addr> --- dump function symbol and code position of address" 78b6255198SJoseph Chen echo " ./make.sh map --- cat u-boot.map" 79b6255198SJoseph Chen echo " ./make.sh sym --- cat u-boot.sym" 80b6255198SJoseph Chen} 8141cf5e5aSJoseph Chen 82cd7ae718SJoseph Chenprepare() 83cd7ae718SJoseph Chen{ 84b6255198SJoseph Chen local absolute_path cmd dir count 8530b04afcSJoseph Chen 8653ea5791SJoseph Chen # Parse output directory 'O=<dir>' 87b6255198SJoseph Chen cmd=${OUTDIR%=*} 8830b04afcSJoseph Chen if [ "${cmd}" = 'O' ]; then 89b6255198SJoseph Chen OUTDIR=${OUTDIR#*=} 9030b04afcSJoseph Chen OUTOPT=O=${OUTDIR} 9130b04afcSJoseph Chen else 92b6255198SJoseph Chen case $BOARD in 9353ea5791SJoseph Chen # Parse from exit .config 945c75ab41SJoseph Chen ''|elf*|loader*|trust|uboot|map|sym) 95b6255198SJoseph Chen count=`find -name .config | wc -l` 96b6255198SJoseph Chen dir=`find -name .config` 9753ea5791SJoseph Chen # Good, find only one .config 98b6255198SJoseph Chen if [ $count -eq 1 ]; then 99b6255198SJoseph Chen dir=${dir%/*} 100b6255198SJoseph Chen OUTDIR=${dir#*/} 10153ea5791SJoseph Chen # Set OUTOPT if not current directory 102b6255198SJoseph Chen if [ $OUTDIR != '.' ]; then 103b6255198SJoseph Chen OUTOPT=O=${OUTDIR} 104b6255198SJoseph Chen fi 105b6255198SJoseph Chen elif [ $count -eq 0 ]; then 106b6255198SJoseph Chen echo 107b6255198SJoseph Chen echo "Build failed, Can't find .config" 108b6255198SJoseph Chen help 109b6255198SJoseph Chen exit 1 110b6255198SJoseph Chen else 111b6255198SJoseph Chen echo 112b6255198SJoseph Chen echo "Build failed, find $count '.config': " 113b6255198SJoseph Chen echo "$dir" 114b6255198SJoseph Chen echo "Please leave only one of them" 115b6255198SJoseph Chen exit 1 116b6255198SJoseph Chen fi 117b6255198SJoseph Chen ;; 118b6255198SJoseph Chen 119b6255198SJoseph Chen *) 12030b04afcSJoseph Chen OUTDIR=. 121b6255198SJoseph Chen ;; 122b6255198SJoseph Chen esac 12330b04afcSJoseph Chen fi 124cd7ae718SJoseph Chen 125b6255198SJoseph Chen # Parse help and make defconfig 126b6255198SJoseph Chen case $BOARD in 12753ea5791SJoseph Chen #Help 128b6255198SJoseph Chen --help|-help|help|--h|-h) 129b6255198SJoseph Chen help 130b6255198SJoseph Chen exit 0 131b6255198SJoseph Chen ;; 13253ea5791SJoseph Chen 13353ea5791SJoseph Chen #Subcmd 1345c75ab41SJoseph Chen ''|elf*|loader*|trust|uboot|map|sym) 135b6255198SJoseph Chen ;; 136b6255198SJoseph Chen 137b6255198SJoseph Chen *) 13853ea5791SJoseph Chen #Func address is valid ? 13953ea5791SJoseph Chen if [ -z $(echo ${FUNCADDR} | sed 's/[0-9,a-f,A-F]//g') ]; then 14053ea5791SJoseph Chen return 14153ea5791SJoseph Chen elif [ ! -f configs/${BOARD}_defconfig ]; then 14230b04afcSJoseph Chen echo 143cd7ae718SJoseph Chen echo "Can't find: configs/${BOARD}_defconfig" 1447c19369dSJoseph Chen echo 14530b04afcSJoseph Chen echo "******** Rockchip Support List *************" 14630b04afcSJoseph Chen echo "${SUPPORT_LIST}" 1477c19369dSJoseph Chen echo "********************************************" 1487c19369dSJoseph Chen echo 149cd7ae718SJoseph Chen exit 1 150b6255198SJoseph Chen else 151b6255198SJoseph Chen echo "make for ${BOARD}_defconfig by -j${JOB}" 152b6255198SJoseph Chen make ${BOARD}_defconfig ${OUTOPT} 153cd7ae718SJoseph Chen fi 154b6255198SJoseph Chen ;; 155b6255198SJoseph Chen esac 156cd7ae718SJoseph Chen 157fb90bd1dSJoseph Chen # Initialize RKBIN and RKTOOLS 158bc98b3c8SJoseph Chen if [ -d ${RKBIN_TOOLS} ]; then 159bc98b3c8SJoseph Chen absolute_path=$(cd `dirname ${RKBIN_TOOLS}`; pwd) 160bc98b3c8SJoseph Chen RKBIN=${absolute_path} 161fb90bd1dSJoseph Chen RKTOOLS=${absolute_path}/tools 162cd7ae718SJoseph Chen else 163cd7ae718SJoseph Chen echo 164fb90bd1dSJoseph Chen echo "Can't find '../rkbin/' repository, please download it before pack image!" 165cd7ae718SJoseph Chen echo "How to obtain? 3 ways:" 166fb90bd1dSJoseph Chen echo " 1. Login your Rockchip gerrit account: \"Projects\" -> \"List\" -> search \"rk/rkbin\" repository" 167fb90bd1dSJoseph Chen echo " 2. Github repository: https://github.com/rockchip-linux/rkbin" 168fb90bd1dSJoseph Chen echo " 3. Download full release SDK repository" 169cd7ae718SJoseph Chen exit 1 170cd7ae718SJoseph Chen fi 17130b04afcSJoseph Chen} 1727c2526e9SJoseph Chen 17327a50c86SAndy Yanselect_toolchain() 17427a50c86SAndy Yan{ 175bc98b3c8SJoseph Chen local absolute_path 176bc98b3c8SJoseph Chen 177366bd23fSJoseph Chen if grep -q '^CONFIG_ARM64=y' ${OUTDIR}/.config ; then 178bc98b3c8SJoseph Chen if [ -d ${TOOLCHAIN_ARM64} ]; then 179bc98b3c8SJoseph Chen absolute_path=$(cd `dirname ${TOOLCHAIN_ARM64}`; pwd) 180bc98b3c8SJoseph Chen TOOLCHAIN_GCC=${absolute_path}/bin/${GCC_ARM64} 1810ff0e214SJoseph Chen TOOLCHAIN_OBJDUMP=${absolute_path}/bin/${OBJ_ARM64} 18253ea5791SJoseph Chen TOOLCHAIN_ADDR2LINE=${absolute_path}/bin/${ADDR2LINE_ARM64} 183bc98b3c8SJoseph Chen else 184366bd23fSJoseph Chen echo "Can't find toolchain: ${TOOLCHAIN_ARM64}" 185bc98b3c8SJoseph Chen exit 1 18627a50c86SAndy Yan fi 18727a50c86SAndy Yan else 188bc98b3c8SJoseph Chen if [ -d ${TOOLCHAIN_ARM32} ]; then 189bc98b3c8SJoseph Chen absolute_path=$(cd `dirname ${TOOLCHAIN_ARM32}`; pwd) 190bc98b3c8SJoseph Chen TOOLCHAIN_GCC=${absolute_path}/bin/${GCC_ARM32} 1910ff0e214SJoseph Chen TOOLCHAIN_OBJDUMP=${absolute_path}/bin/${OBJ_ARM32} 19253ea5791SJoseph Chen TOOLCHAIN_ADDR2LINE=${absolute_path}/bin/${ADDR2LINE_ARM32} 193bc98b3c8SJoseph Chen else 194366bd23fSJoseph Chen echo "Can't find toolchain: ${TOOLCHAIN_ARM32}" 195bc98b3c8SJoseph Chen exit 1 19627a50c86SAndy Yan fi 19727a50c86SAndy Yan fi 198bc98b3c8SJoseph Chen 19953ea5791SJoseph Chen # echo "toolchain: ${TOOLCHAIN_GCC}" 200bc98b3c8SJoseph Chen} 201bc98b3c8SJoseph Chen 2020ff0e214SJoseph Chensub_commands() 2030ff0e214SJoseph Chen{ 2045c75ab41SJoseph Chen local cmd=${SUBCMD%-*} opt=${SUBCMD#*-} 2050ff0e214SJoseph Chen 206b6255198SJoseph Chen case $cmd in 207b6255198SJoseph Chen elf) 208366bd23fSJoseph Chen if [ ! -f ${OUTDIR}/u-boot ]; then 209366bd23fSJoseph Chen echo "Can't find elf file: ${OUTDIR}/u-boot" 2100ff0e214SJoseph Chen exit 1 2110ff0e214SJoseph Chen else 212b6255198SJoseph Chen # default 'cmd' without option, use '-D' 2135c75ab41SJoseph Chen if [ "${cmd}" = 'elf' -a "${opt}" = 'elf' ]; then 2145c75ab41SJoseph Chen opt=D 2150ff0e214SJoseph Chen fi 2165c75ab41SJoseph Chen ${TOOLCHAIN_OBJDUMP} -${opt} ${OUTDIR}/u-boot | less 21707de173aSJoseph Chen exit 0 21807de173aSJoseph Chen fi 219b6255198SJoseph Chen ;; 220b6255198SJoseph Chen 221b6255198SJoseph Chen map) 222b6255198SJoseph Chen cat ${OUTDIR}/u-boot.map | less 223b6255198SJoseph Chen exit 0 224b6255198SJoseph Chen ;; 225b6255198SJoseph Chen 226b6255198SJoseph Chen sym) 227b6255198SJoseph Chen cat ${OUTDIR}/u-boot.sym | less 228b6255198SJoseph Chen exit 0 229b6255198SJoseph Chen ;; 230b6255198SJoseph Chen 231b6255198SJoseph Chen trust) 232a43a18b2SJoseph Chen pack_trust_image 233a43a18b2SJoseph Chen exit 0 234b6255198SJoseph Chen ;; 235b6255198SJoseph Chen 236b6255198SJoseph Chen loader) 2375c75ab41SJoseph Chen pack_loader_image ${opt} 238a43a18b2SJoseph Chen exit 0 239b6255198SJoseph Chen ;; 240b6255198SJoseph Chen 241b6255198SJoseph Chen uboot) 242fb90bd1dSJoseph Chen pack_uboot_image 243fb90bd1dSJoseph Chen exit 0 244b6255198SJoseph Chen ;; 245b6255198SJoseph Chen 246b6255198SJoseph Chen *) 24753ea5791SJoseph Chen # Search function and code position of address 24853ea5791SJoseph Chen if [ -z $(echo ${FUNCADDR} | sed 's/[0-9,a-f,A-F]//g') ] && [ ${FUNCADDR} ]; then 24953ea5791SJoseph Chen echo 25053ea5791SJoseph Chen sed -n "/${FUNCADDR}/p" ${OUTDIR}/u-boot.sym 25153ea5791SJoseph Chen ${TOOLCHAIN_ADDR2LINE} -e ${OUTDIR}/u-boot ${FUNCADDR} 25253ea5791SJoseph Chen exit 0 25353ea5791SJoseph Chen fi 254b6255198SJoseph Chen ;; 255b6255198SJoseph Chen esac 2560ff0e214SJoseph Chen} 2570ff0e214SJoseph Chen 258fb90bd1dSJoseph Chen# Support platform special configure 259fb90bd1dSJoseph Chen# 1. fixup chip name; 260fb90bd1dSJoseph Chen# 2. fixup pack mode; 261fb90bd1dSJoseph Chen# 3. fixup image size 262fb90bd1dSJoseph Chen# 4. fixup ARM64 cpu boot with AArch32 26341cf5e5aSJoseph Chenfixup_platform_configure() 264bc98b3c8SJoseph Chen{ 265d443b7d5SJoseph Chen local count plat 266d443b7d5SJoseph Chen 267d443b7d5SJoseph Chen# <1> Get RKCHIP for searching trust/loader ini files 268d443b7d5SJoseph Chen count=`grep -c '^CONFIG_ROCKCHIP_[R,P][X,V,K][0-9][0-9]' ${OUTDIR}/.config` 269d443b7d5SJoseph Chen RKCHIP=`grep '^CONFIG_ROCKCHIP_[R,P][X,V,K][0-9][0-9]' ${OUTDIR}/.config` 270d443b7d5SJoseph Chen 271d443b7d5SJoseph Chen if [ $count -eq 1 ]; then 272d443b7d5SJoseph Chen RKCHIP=${RKCHIP%=*} 273d443b7d5SJoseph Chen RKCHIP=${RKCHIP##*_} 274d443b7d5SJoseph Chen elif [ $count -gt 1 ]; then 275d443b7d5SJoseph Chen # Is RK3126 ? 276d443b7d5SJoseph Chen plat=`grep '^CONFIG_ROCKCHIP_[R,P][X,V,K][0-9][0-9]' ${OUTDIR}/.config | sed -n "/CONFIG_ROCKCHIP_RK3126=y/p"` 277d443b7d5SJoseph Chen if [ "$plat" = 'CONFIG_ROCKCHIP_RK3126=y' ]; then 278d443b7d5SJoseph Chen RKCHIP=RK3126 279d443b7d5SJoseph Chen fi 280d443b7d5SJoseph Chen # Is RK3326 ? 281d443b7d5SJoseph Chen plat=`grep '^CONFIG_ROCKCHIP_[R,P][X,V,K][0-9][0-9]' ${OUTDIR}/.config | sed -n "/CONFIG_ROCKCHIP_RK3326=y/p"` 282d443b7d5SJoseph Chen if [ "$plat" = 'CONFIG_ROCKCHIP_RK3326=y' ]; then 283d443b7d5SJoseph Chen RKCHIP=RK3326 284d443b7d5SJoseph Chen fi 285d443b7d5SJoseph Chen else 286d443b7d5SJoseph Chen echo "Can't get Rockchip SoC definition in .config" 287d443b7d5SJoseph Chen exit 1 288bc98b3c8SJoseph Chen fi 28941cf5e5aSJoseph Chen 29041cf5e5aSJoseph Chen# <2> Fixup rsa/sha pack mode for platforms 29141cf5e5aSJoseph Chen # RK3308/PX30/RK3326 use RSA-PKCS1 V2.1, it's pack magic is "3" 29241cf5e5aSJoseph Chen if [ $RKCHIP = "PX30" -o $RKCHIP = "RK3326" -o $RKCHIP = "RK3308" ]; then 29341cf5e5aSJoseph Chen PLATFORM_RSA="--rsa 3" 29441cf5e5aSJoseph Chen # RK3368 use rk big endian SHA256, it's pack magic is "2" 29541cf5e5aSJoseph Chen elif [ $RKCHIP = "RK3368" ]; then 29641cf5e5aSJoseph Chen PLATFORM_SHA="--sha 2" 29741cf5e5aSJoseph Chen # other platforms use default configure 29841cf5e5aSJoseph Chen fi 29941cf5e5aSJoseph Chen 30041cf5e5aSJoseph Chen# <3> Fixup images size pack for platforms 30141cf5e5aSJoseph Chen if [ $RKCHIP = "RK3308" ]; then 30241cf5e5aSJoseph Chen if grep -q '^CONFIG_ARM64_BOOT_AARCH32=y' ${OUTDIR}/.config ; then 30341cf5e5aSJoseph Chen PLATFORM_UBOOT_IMG_SIZE="--size 512 2" 30441cf5e5aSJoseph Chen PLATFORM_TRUST_IMG_SIZE="--size 512 2" 30541cf5e5aSJoseph Chen else 30641cf5e5aSJoseph Chen PLATFORM_UBOOT_IMG_SIZE="--size 1024 2" 30741cf5e5aSJoseph Chen PLATFORM_TRUST_IMG_SIZE="--size 1024 2" 30841cf5e5aSJoseph Chen fi 30941cf5e5aSJoseph Chen fi 31041cf5e5aSJoseph Chen 31141cf5e5aSJoseph Chen# <4> Fixup PLATFORM_AARCH32 for ARM64 cpu platforms 31241cf5e5aSJoseph Chen if [ $RKCHIP = "RK3308" ]; then 31341cf5e5aSJoseph Chen if grep -q '^CONFIG_ARM64_BOOT_AARCH32=y' ${OUTDIR}/.config ; then 31441cf5e5aSJoseph Chen PLATFORM_AARCH32="AARCH32" 31541cf5e5aSJoseph Chen fi 31641cf5e5aSJoseph Chen fi 31727a50c86SAndy Yan} 318de9a6cd2SJoseph Chen 319cd7ae718SJoseph Chenpack_uboot_image() 320de9a6cd2SJoseph Chen{ 321cd7ae718SJoseph Chen local UBOOT_LOAD_ADDR 322de9a6cd2SJoseph Chen 323366bd23fSJoseph Chen UBOOT_LOAD_ADDR=`sed -n "/CONFIG_SYS_TEXT_BASE=/s/CONFIG_SYS_TEXT_BASE=//p" ${OUTDIR}/include/autoconf.mk|tr -d '\r'` 324fb90bd1dSJoseph Chen ${RKTOOLS}/loaderimage --pack --uboot ${OUTDIR}/u-boot.bin uboot.img ${UBOOT_LOAD_ADDR} ${PLATFORM_UBOOT_IMG_SIZE} 3257c19369dSJoseph Chen 326fb90bd1dSJoseph Chen # Delete u-boot.img and u-boot-dtb.img, which makes users not be confused with final uboot.img 3277c19369dSJoseph Chen if [ -f ${OUTDIR}/u-boot.img ]; then 3287c19369dSJoseph Chen rm ${OUTDIR}/u-boot.img 3297c19369dSJoseph Chen fi 3307c19369dSJoseph Chen 3317c19369dSJoseph Chen if [ -f ${OUTDIR}/u-boot-dtb.img ]; then 3327c19369dSJoseph Chen rm ${OUTDIR}/u-boot-dtb.img 3337c19369dSJoseph Chen fi 3347c19369dSJoseph Chen 335366bd23fSJoseph Chen echo "pack uboot okay! Input: ${OUTDIR}/u-boot.bin" 336de9a6cd2SJoseph Chen} 337de9a6cd2SJoseph Chen 338cd7ae718SJoseph Chenpack_loader_image() 339cd7ae718SJoseph Chen{ 3405c75ab41SJoseph Chen local mode=$1 files ini 341d9d90a73SJoseph Chen 34280fb8d2cSShunqian Zheng if [ ! -f ${RKBIN}/RKBOOT/${RKCHIP}MINIALL.ini ]; then 34380fb8d2cSShunqian Zheng echo "pack loader failed! Can't find: ${RKBIN}/RKBOOT/${RKCHIP}MINIALL.ini" 34451441a28SJoseph Chen return 34551441a28SJoseph Chen fi 34651441a28SJoseph Chen 347cd7ae718SJoseph Chen cd ${RKBIN} 3485c75ab41SJoseph Chen 3495c75ab41SJoseph Chen if [ "${mode}" = 'all' ]; then 350d9d90a73SJoseph Chen files=`ls ${RKBIN}/RKBOOT/${RKCHIP}MINIALL*.ini` 351d9d90a73SJoseph Chen for ini in $files 352d9d90a73SJoseph Chen do 353d9d90a73SJoseph Chen if [ -f "$ini" ]; then 354d9d90a73SJoseph Chen ${RKTOOLS}/boot_merger --replace tools/rk_tools/ ./ $ini 355d9d90a73SJoseph Chen echo "pack loader okay! Input: $ini" 356d9d90a73SJoseph Chen fi 357d9d90a73SJoseph Chen done 3585c75ab41SJoseph Chen else 3595c75ab41SJoseph Chen ${RKTOOLS}/boot_merger --replace tools/rk_tools/ ./ ${RKBIN}/RKBOOT/${RKCHIP}MINIALL.ini 3605c75ab41SJoseph Chen echo "pack loader okay! Input: ${RKBIN}/RKBOOT/${RKCHIP}MINIALL.ini" 3615c75ab41SJoseph Chen fi 362d9d90a73SJoseph Chen 363fb90bd1dSJoseph Chen cd - && mv ${RKBIN}/*_loader_*.bin ./ 364cd7ae718SJoseph Chen} 365cd7ae718SJoseph Chen 366cd7ae718SJoseph Chenpack_trust_image() 367cd7ae718SJoseph Chen{ 36841cf5e5aSJoseph Chen local TOS TOS_TA DARM_BASE TEE_LOAD_ADDR TEE_OFFSET=0x8400000 369cd7ae718SJoseph Chen 370cd7ae718SJoseph Chen # ARM64 uses trust_merger 371fa400ae5SJoseph Chen if grep -Eq ''^CONFIG_ARM64=y'|'^CONFIG_ARM64_BOOT_AARCH32=y'' ${OUTDIR}/.config ; then 37241cf5e5aSJoseph Chen if [ ! -f ${RKBIN}/RKTRUST/${RKCHIP}${PLATFORM_AARCH32}TRUST.ini ]; then 37341cf5e5aSJoseph Chen echo "pack trust failed! Can't find: ${RKBIN}/RKTRUST/${RKCHIP}${PLATFORM_AARCH32}TRUST.ini" 37451441a28SJoseph Chen return 37551441a28SJoseph Chen fi 37651441a28SJoseph Chen 377cd7ae718SJoseph Chen cd ${RKBIN} 378fb90bd1dSJoseph Chen ${RKTOOLS}/trust_merger ${PLATFORM_SHA} ${PLATFORM_RSA} ${PLATFORM_TRUST_IMG_SIZE} --replace tools/rk_tools/ ./ ${RKBIN}/RKTRUST/${RKCHIP}${PLATFORM_AARCH32}TRUST.ini 379e5e978b3SJoseph Chen 380fb90bd1dSJoseph Chen cd - && mv ${RKBIN}/trust.img ./trust.img 38141cf5e5aSJoseph Chen echo "pack trust okay! Input: ${RKBIN}/RKTRUST/${RKCHIP}${PLATFORM_AARCH32}TRUST.ini" 382cd7ae718SJoseph Chen # ARM uses loaderimage 383cd7ae718SJoseph Chen else 38480fb8d2cSShunqian Zheng if [ ! -f ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini ]; then 38580fb8d2cSShunqian Zheng echo "pack trust failed! Can't find: ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini" 38651441a28SJoseph Chen return 38751441a28SJoseph Chen fi 38851441a28SJoseph Chen 389cd7ae718SJoseph Chen # OP-TEE is 132M(0x8400000) offset from DRAM base. 390366bd23fSJoseph Chen DARM_BASE=`sed -n "/CONFIG_SYS_SDRAM_BASE=/s/CONFIG_SYS_SDRAM_BASE=//p" ${OUTDIR}/include/autoconf.mk|tr -d '\r'` 391cd7ae718SJoseph Chen TEE_LOAD_ADDR=$((DARM_BASE+TEE_OFFSET)) 392cd7ae718SJoseph Chen 393cd7ae718SJoseph Chen # Convert Dec to Hex 394cd7ae718SJoseph Chen TEE_LOAD_ADDR=$(echo "obase=16;${TEE_LOAD_ADDR}"|bc) 395cd7ae718SJoseph Chen 3960e90839aSJoseph Chen # Parse orignal path 39780fb8d2cSShunqian Zheng TOS=`sed -n "/TOS=/s/TOS=//p" ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini|tr -d '\r'` 39880fb8d2cSShunqian Zheng TOS_TA=`sed -n "/TOSTA=/s/TOSTA=//p" ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini|tr -d '\r'` 399cd7ae718SJoseph Chen 4000e90839aSJoseph Chen # replace "./tools/rk_tools/" with "./" to compatible legacy ini content of rkdevelop branch 4010e90839aSJoseph Chen TOS=$(echo ${TOS} | sed "s/tools\/rk_tools\//\.\//g") 4020e90839aSJoseph Chen TOS_TA=$(echo ${TOS_TA} | sed "s/tools\/rk_tools\//\.\//g") 4030e90839aSJoseph Chen 404a64486b5SJoseph Chen if [ $TOS_TA -a $TOS ]; then 405fb90bd1dSJoseph Chen ${RKTOOLS}/loaderimage --pack --trustos ${RKBIN}/${TOS} ./trust.img ${TEE_LOAD_ADDR} ${PLATFORM_TRUST_IMG_SIZE} 406fb90bd1dSJoseph Chen ${RKTOOLS}/loaderimage --pack --trustos ${RKBIN}/${TOS_TA} ./trust_with_ta.img ${TEE_LOAD_ADDR} ${PLATFORM_TRUST_IMG_SIZE} 407cd7ae718SJoseph Chen echo "Both trust.img and trust_with_ta.img are ready" 408cd7ae718SJoseph Chen elif [ $TOS ]; then 409fb90bd1dSJoseph Chen ${RKTOOLS}/loaderimage --pack --trustos ${RKBIN}/${TOS} ./trust.img ${TEE_LOAD_ADDR} ${PLATFORM_TRUST_IMG_SIZE} 410cd7ae718SJoseph Chen echo "trust.img is ready" 411cd7ae718SJoseph Chen elif [ $TOS_TA ]; then 412fb90bd1dSJoseph Chen ${RKTOOLS}/loaderimage --pack --trustos ${RKBIN}/${TOS_TA} ./trust.img ${TEE_LOAD_ADDR} ${PLATFORM_TRUST_IMG_SIZE} 413cd7ae718SJoseph Chen echo "trust.img with ta is ready" 414cd7ae718SJoseph Chen else 415a64486b5SJoseph Chen echo "Can't find any tee bin" 416a64486b5SJoseph Chen exit 1 417cd7ae718SJoseph Chen fi 41851441a28SJoseph Chen 41980fb8d2cSShunqian Zheng echo "pack trust okay! Input: ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini" 420cd7ae718SJoseph Chen fi 421cd7ae718SJoseph Chen} 422cd7ae718SJoseph Chen 42330b04afcSJoseph Chenfinish() 42430b04afcSJoseph Chen{ 42530b04afcSJoseph Chen echo 42630b04afcSJoseph Chen if [ "$BOARD" = '' ]; then 427d443b7d5SJoseph Chen echo "Platform ${RKCHIP}${PLATFORM_AARCH32} is build OK, with exist .config" 42830b04afcSJoseph Chen else 429d443b7d5SJoseph Chen echo "Platform ${RKCHIP}${PLATFORM_AARCH32} is build OK, with new .config(make ${BOARD}_defconfig)" 43030b04afcSJoseph Chen fi 43130b04afcSJoseph Chen} 43230b04afcSJoseph Chen 433cd7ae718SJoseph Chenprepare 4347c2526e9SJoseph Chenselect_toolchain 43541cf5e5aSJoseph Chenfixup_platform_configure 4360ff0e214SJoseph Chensub_commands 437366bd23fSJoseph Chenmake CROSS_COMPILE=${TOOLCHAIN_GCC} all --jobs=${JOB} ${OUTOPT} 438cd7ae718SJoseph Chenpack_uboot_image 439d93242f2SJoseph Chenpack_loader_image 440cd7ae718SJoseph Chenpack_trust_image 44130b04afcSJoseph Chenfinish 442