diff --git a/make.sh b/make.sh index 5fffd60fc6..9853c1285e 100755 --- a/make.sh +++ b/make.sh @@ -8,6 +8,7 @@ set -e JOB=`sed -n "N;/processor/p" /proc/cpuinfo|wc -l` SUPPORT_LIST=`ls configs/*[r,p][x,v,k][0-9][0-9]*_defconfig` +CMD_ARGS=$1 # @LOADER: map to $RKCHIP_LOADER for loader ini # @TRUST: map to $RKCHIP_TRUST for trust ini @@ -54,11 +55,6 @@ CHIP_CFG_FIXUP_TABLE=( "CONFIG_ROCKCHIP_RV1126 3 - -,- -,- -,- -,- - -" ) -CHIP_TPL_MAGIC_TABLE=( - "CONFIG_ROCKCHIP_PX30 RK33" - "CONFIG_ROCKCHIP_RV1126 110B" -) - ########################################### User can modify ############################################# # User's rkbin tool relative path RKBIN_TOOLS=../rkbin/tools @@ -68,14 +64,14 @@ ADDR2LINE_ARM32=arm-linux-gnueabihf-addr2line ADDR2LINE_ARM64=aarch64-linux-gnu-addr2line OBJ_ARM32=arm-linux-gnueabihf-objdump OBJ_ARM64=aarch64-linux-gnu-objdump +NM_ARM32=arm-linux-gnueabihf-nm +NM_ARM64=aarch64-linux-gnu-nm GCC_ARM32=arm-linux-gnueabihf- GCC_ARM64=aarch64-linux-gnu- TOOLCHAIN_ARM32=../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin TOOLCHAIN_ARM64=../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin ########################################### User not touch ############################################# -RKTOOLS=./tools - # Declare global INI file searching index name for every chip, update in select_chip_info() RKCHIP="-" RKCHIP_LABEL="-" @@ -90,15 +86,23 @@ RKBIN= # Declare global toolchain path for CROSS_COMPILE, updated in select_toolchain() TOOLCHAIN_GCC= +TOOLCHAIN_NM= TOOLCHAIN_OBJDUMP= TOOLCHAIN_ADDR2LINE= # Declare global plaform configure, updated in fixup_platform_configure() -PLATFORM_RSA= -PLATFORM_SHA= -PLATFORM_UBOOT_SIZE= -PLATFORM_TRUST_SIZE= -PLATFORM_TYPE="RKFW" +PLAT_RSA= +PLAT_SHA= +PLAT_UBOOT_SIZE= +PLAT_TRUST_SIZE= +PLAT_TYPE="RKFW" # default + +SRCTREE=`pwd` +SCRIPT_ATF="${SRCTREE}/scripts/atf.sh" +SCRIPT_TOS="${SRCTREE}/scripts/tos.sh" +SCRIPT_SPL="${SRCTREE}/scripts/spl.sh" +SCRIPT_UBOOT="${SRCTREE}/scripts/uboot.sh" +SCRIPT_LOADER="${SRCTREE}/scripts/loader.sh" ######################################################################################################### function help() @@ -108,8 +112,8 @@ function help() echo " ./make.sh [board|sub-command]" echo echo " - board: board name of defconfig" - echo " - sub-command: elf*|loader*|spl*|tpl*|itb|trust*|uboot|map|sym|" - echo " - ini: assigned ini file to pack trust/loader" + echo " - sub-command: elf*|loader|trust|uboot|--spl|--tpl|itb|map|sym|" + echo " - ini: ini file to pack trust/loader" echo echo "Output:" echo " When board built okay, there are uboot/trust/loader images in current directory" @@ -129,17 +133,17 @@ function help() echo " ./make.sh trust --- pack trust img with assigned ini file" echo " ./make.sh loader --- pack loader bin" echo " ./make.sh loader --- pack loader img with assigned ini file" - echo " ./make.sh spl --- pack loader with u-boot-spl.bin and u-boot-tpl.bin" - echo " ./make.sh spl-s --- pack loader only replace miniloader with u-boot-spl.bin" - echo " ./make.sh itb --- pack u-boot.itb(TODO: bl32 is not included for ARMv8)" + echo " ./make.sh --spl --- pack loader with u-boot-spl.bin" + echo " ./make.sh --tpl --- pack loader with u-boot-tpl.bin" + echo " ./make.sh --tpl --spl --- pack loader with u-boot-tpl.bin and u-boot-spl.bin" echo echo "3. Debug:" echo " ./make.sh elf --- dump elf file with -D(default)" echo " ./make.sh elf-S --- dump elf file with -S" echo " ./make.sh elf-d --- dump elf file with -d" echo " ./make.sh elf-* --- dump elf file with -*" - echo " ./make.sh --- dump function symbol and code position of address(no relocated)" - echo " ./make.sh --- dump function symbol and code position of address(relocated)" + echo " ./make.sh --- unwind address(no relocated)" + echo " ./make.sh --- unwind address(relocated)" echo " ./make.sh map --- cat u-boot.map" echo " ./make.sh sym --- cat u-boot.sym" } @@ -159,7 +163,7 @@ function prepare() fi if grep -q '^CONFIG_ROCKCHIP_FIT_IMAGE_PACK=y' .config ; then - PLATFORM_TYPE="FIT" + PLAT_TYPE="FIT" fi } @@ -167,46 +171,25 @@ function process_args() { while [ $# -gt 0 ]; do case $1 in - --help|-help|help|--h|-h) + *help|--h|-h) help exit 0 ;; - - ''|loader|trust|uboot|spl*|tpl*|debug*|itb|env|fit*) - ARG_CMD=$1 - shift 1 - ;; - - --sz-trust) - ARG_TRUST_SIZE="--size $2 $3" - shift 3 - ;; - - --sz-uboot) - ARG_UBOOT_SIZE="--size $2 $3" - shift 3 - ;; - - --no-pack) - ARG_NO_PACK="y" - shift 1 - ;; - - --no-uboot) - ARG_NO_UBOOT="y" - shift 1 - ;; - - map|sym|elf*) - ARG_CMD=$1 + # '': build with exist .config + # loader|trust|uboot: pack image + # debug*|map|sym|elf*|nm: debug command + # env: build env tool + # itb: pack itb image + # fit: pack non-secure uboot.img && boot.img + ''|loader|trust|uboot|debug*|itb|env|fit|map|sym|elf*|nm) if [ "$2" == "spl" -o "$2" == "tpl" ]; then - ARG_S_TPL=$2 + ARG_TSPL=$2 shift 1 fi shift 1 ;; - - *.ini) + # trust/loader ini files for packing trust.img/loader.img + *.ini|*.INI) if [ ! -f $1 ]; then echo "ERROR: No $1" fi @@ -217,19 +200,42 @@ function process_args() fi shift 1 ;; - + --sz-trust) # set trust size + ARG_TRUST_SIZE="--size $2 $3" + shift 3 + ;; + --sz-uboot) # set uboot size + ARG_UBOOT_SIZE="--size $2 $3" + shift 3 + ;; + --no-pack) # FIT: build but not pack image + ARG_NO_PACK="y" + shift 1 + ;; + --no-uboot) # FIT: pack uboot.img without u-boot + ARG_NO_UBOOT="y" + shift 1 + ;; + --tpl|tpl) # use tpl file + ARG_TPL_BIN="tpl/u-boot-tpl.bin" + shift 1 + ;; + --spl|spl*) # use spl file + ARG_SPL_BIN="spl/u-boot-spl.bin" + shift 1 + ;; *) - # out scripts args - NUM=$(./scripts/fit-mkimg.sh --p-check $1) + #1. FIT scripts args + NUM=$(./scripts/fit-mkimg.sh --arg-check $1) if [ ${NUM} -ne 0 ]; then [ ${NUM} -eq 1 ] && ARG_LIST_FIT="${ARG_LIST_FIT} $1" [ ${NUM} -eq 2 ] && ARG_LIST_FIT="${ARG_LIST_FIT} $1 $2" shift ${NUM} continue - # FUNC address + #2. unwind function address elif [ -z $(echo $1 | sed 's/[0-9,a-f,A-F,x,X,-]//g') ]; then ARG_FUNCADDR=$1 - # xxx_defconfig + #3. make defconfig else ARG_BOARD=$1 if [ ! -f configs/${ARG_BOARD}_defconfig -a ! -f configs/${ARG_BOARD}.config ]; then @@ -266,6 +272,7 @@ function select_toolchain() if grep -q '^CONFIG_ARM64=y' .config ; then if [ -d ${TOOLCHAIN_ARM64} ]; then absolute_path=$(cd `dirname ${TOOLCHAIN_ARM64}`; pwd) + TOOLCHAIN_NM=${absolute_path}/bin/${NM_ARM64} TOOLCHAIN_GCC=${absolute_path}/bin/${GCC_ARM64} TOOLCHAIN_OBJDUMP=${absolute_path}/bin/${OBJ_ARM64} TOOLCHAIN_ADDR2LINE=${absolute_path}/bin/${ADDR2LINE_ARM64} @@ -276,6 +283,7 @@ function select_toolchain() else if [ -d ${TOOLCHAIN_ARM32} ]; then absolute_path=$(cd `dirname ${TOOLCHAIN_ARM32}`; pwd) + TOOLCHAIN_NM=${absolute_path}/bin/${NM_ARM32} TOOLCHAIN_GCC=${absolute_path}/bin/${GCC_ARM32} TOOLCHAIN_OBJDUMP=${absolute_path}/bin/${OBJ_ARM32} TOOLCHAIN_ADDR2LINE=${absolute_path}/bin/${ADDR2LINE_ARM32} @@ -286,130 +294,6 @@ function select_toolchain() fi } -function sub_commands() -{ - # skip "--" parameter, such as "--rollback-index-..." - if [[ "${ARG_CMD}" != "--*" ]]; then - cmd=${ARG_CMD%-*} - arg=${ARG_CMD#*-} - else - cmd=${ARG_CMD} - fi - - if [ "${ARG_S_TPL}" == "tpl" -o "${ARG_S_TPL}" == "spl" ]; then - elf=`find -name u-boot-${ARG_S_TPL}` - map=`find -name u-boot-${ARG_S_TPL}.map` - sym=`find -name u-boot-${ARG_S_TPL}.sym` - else - elf=u-boot - map=u-boot.map - sym=u-boot.sym - fi - - case ${cmd} in - elf) - if [ ! -f ${elf} ]; then - echo "ERROR: No elf: ${elf}" - exit 1 - else - if [ "${cmd}" == "elf" -a "${arg}" == "elf" ]; then - arg=D # default - fi - ${TOOLCHAIN_OBJDUMP} -${arg} ${elf} | less - exit 0 - fi - ;; - - debug) - ./scripts/rkpatch.sh ${arg} - exit 0 - ;; - - fit) - if [ "${arg}" == "ns" ]; then - ./scripts/fit-mkimg.sh --uboot-itb --boot-itb --no-vboot ${ARG_LIST_FIT} - fi - exit 0 - ;; - - map) - cat ${map} | less - exit 0 - ;; - - sym) - cat ${sym} | less - exit 0 - ;; - - trust) - pack_trust_image - exit 0 - ;; - - loader) - pack_loader_image - exit 0 - ;; - - tpl|spl) - pack_spl_loader_image ${ARG_CMD} - exit 0 - ;; - - itb) - pack_uboot_itb_image - exit 0 - ;; - - uboot) - pack_uboot_image - exit 0 - ;; - - env) - make CROSS_COMPILE=${TOOLCHAIN_GCC} envtools - exit 0 - ;; - - --rollback-index*) - pack_fit_image ${ARG_LIST_FIT} - exit 0 - ;; - *) - # Search function and code position of address - FUNCADDR=${ARG_FUNCADDR} - RELOC_OFF=${FUNCADDR#*-} - FUNCADDR=${FUNCADDR%-*} - if [ -z $(echo ${FUNCADDR} | sed 's/[0-9,a-f,A-F,x,X,-]//g') ] && [ ${FUNCADDR} ]; then - # With prefix: '0x' or '0X' - if [ `echo ${FUNCADDR} | sed -n "/0[x,X]/p" | wc -l` -ne 0 ]; then - FUNCADDR=`echo ${FUNCADDR} | awk '{ print strtonum($0) }'` - FUNCADDR=`echo "obase=16;${FUNCADDR}"|bc |tr '[A-Z]' '[a-z]'` - fi - if [ `echo ${RELOC_OFF} | sed -n "/0[x,X]/p" | wc -l` -ne 0 ] && [ ${RELOC_OFF} ]; then - RELOC_OFF=`echo ${RELOC_OFF} | awk '{ print strtonum($0) }'` - RELOC_OFF=`echo "obase=16;${RELOC_OFF}"|bc |tr '[A-Z]' '[a-z]'` - fi - - # If reloc address is assigned, do sub - if [ "${FUNCADDR}" != "${RELOC_OFF}" ]; then - # Hex -> Dec -> SUB -> Hex - FUNCADDR=`echo $((16#${FUNCADDR}))` - RELOC_OFF=`echo $((16#${RELOC_OFF}))` - FUNCADDR=$((FUNCADDR-RELOC_OFF)) - FUNCADDR=$(echo "obase=16;${FUNCADDR}"|bc |tr '[A-Z]' '[a-z]') - fi - - echo - sed -n "/${FUNCADDR}/p" ${sym} - ${TOOLCHAIN_ADDR2LINE} -e ${elf} ${FUNCADDR} - exit 0 - fi - ;; - esac -} - # # We select chip info to do: # 1. RKCHIP: fixup platform configure @@ -424,16 +308,16 @@ function select_chip_info() # - PX30, PX3SE # - RK????, RK????X # - RV???? - chip_pattern='^CONFIG_ROCKCHIP_[R,P][X,V,K][0-9ESX]{1,5}' - RKCHIP=`egrep -o ${chip_pattern} .config` + CHIP_PATTERN='^CONFIG_ROCKCHIP_[R,P][X,V,K][0-9ESX]{1,5}' + RKCHIP=`egrep -o ${CHIP_PATTERN} .config` # default RKCHIP=${RKCHIP##*_} # fixup ? for item in "${CHIP_TYPE_FIXUP_TABLE[@]}" do - config_xxx=`echo ${item} | awk '{ print $1 }'` - if grep -q "^${config_xxx}=y" .config ; then + CONFIG_ROCKCHIP_XXX=`echo ${item} | awk '{ print $1 }'` + if grep -q "^${CONFIG_ROCKCHIP_XXX}=y" .config ; then RKCHIP=`echo ${item} | awk '{ print $2 }'` RKCHIP_LOADER=`echo ${item} | awk '{ print $3 }'` RKCHIP_TRUST=`echo ${item} | awk '{ print $4 }'` @@ -455,27 +339,27 @@ function select_chip_info() # Priority: default < CHIP_CFG_FIXUP_TABLE() < make.sh args function fixup_platform_configure() { - u_kb="-" u_num="-" t_kb="-" t_num="-" sha="-" rsa="-" + U_KB="-" U_NUM="-" T_KB="-" T_NUM="-" SHA="-" RSA="-" for item in "${CHIP_CFG_FIXUP_TABLE[@]}" do config_xxx=`echo ${item} | awk '{ print $1 }'` if grep -q "^${config_xxx}=y" .config ; then # <*> Fixup rsa/sha pack mode for platforms - rsa=`echo ${item} | awk '{ print $2 }'` - sha=`echo ${item} | awk '{ print $3 }'` + RSA=`echo ${item} | awk '{ print $2 }'` + SHA=`echo ${item} | awk '{ print $3 }'` # <*> Fixup images size pack for platforms, and ini file if grep -q '^CONFIG_ARM64=y' .config ; then - u_kb=`echo ${item} | awk '{ print $4 }' | awk -F "," '{ print $1 }'` - t_kb=`echo ${item} | awk '{ print $4 }' | awk -F "," '{ print $2 }'` - u_num=`echo ${item} | awk '{ print $5 }' | awk -F "," '{ print $1 }'` - t_num=`echo ${item} | awk '{ print $5 }' | awk -F "," '{ print $2 }'` + U_KB=`echo ${item} | awk '{ print $4 }' | awk -F "," '{ print $1 }'` + T_KB=`echo ${item} | awk '{ print $4 }' | awk -F "," '{ print $2 }'` + U_NUM=`echo ${item} | awk '{ print $5 }' | awk -F "," '{ print $1 }'` + T_NUM=`echo ${item} | awk '{ print $5 }' | awk -F "," '{ print $2 }'` else - u_kb=`echo ${item} | awk '{ print $6 }' | awk -F "," '{ print $1 }'` - t_kb=`echo ${item} | awk '{ print $6 }' | awk -F "," '{ print $2 }'` - u_num=`echo ${item} | awk '{ print $7 }' | awk -F "," '{ print $1 }'` - t_num=`echo ${item} | awk '{ print $7 }' | awk -F "," '{ print $2 }'` + U_KB=`echo ${item} | awk '{ print $6 }' | awk -F "," '{ print $1 }'` + T_KB=`echo ${item} | awk '{ print $6 }' | awk -F "," '{ print $2 }'` + U_NUM=`echo ${item} | awk '{ print $7 }' | awk -F "," '{ print $1 }'` + T_NUM=`echo ${item} | awk '{ print $7 }' | awk -F "," '{ print $2 }'` # AArch32 if grep -q '^CONFIG_ARM64_BOOT_AARCH32=y' .config ; then PADDING=`echo ${item} | awk '{ print $8 }'` @@ -492,26 +376,26 @@ function fixup_platform_configure() fi done - if [ "${sha}" != "-" ]; then - PLATFORM_SHA="--sha ${sha}" + if [ "${SHA}" != "-" ]; then + PLAT_SHA="--sha ${SHA}" fi - if [ "${rsa}" != "-" ]; then - PLATFORM_RSA="--rsa ${rsa}" + if [ "${RSA}" != "-" ]; then + PLAT_RSA="--rsa ${RSA}" fi - if [ "${u_kb}" != "-" ]; then - PLATFORM_UBOOT_SIZE="--size ${u_kb} ${u_num}" + if [ "${U_KB}" != "-" ]; then + PLAT_UBOOT_SIZE="--size ${U_KB} ${U_NUM}" fi - if [ "${t_kb}" != "-" ]; then - PLATFORM_TRUST_SIZE="--size ${t_kb} ${t_num}" + if [ "${T_KB}" != "-" ]; then + PLAT_TRUST_SIZE="--size ${T_KB} ${T_NUM}" fi # args if [ ! -z "${ARG_UBOOT_SIZE}" ]; then - PLATFORM_UBOOT_SIZE=${ARG_UBOOT_SIZE} + PLAT_UBOOT_SIZE=${ARG_UBOOT_SIZE} fi if [ ! -z "${ARG_TRUST_SIZE}" ]; then - PLATFORM_TRUST_SIZE=${ARG_TRUST_SIZE} + PLAT_TRUST_SIZE=${ARG_TRUST_SIZE} fi } @@ -537,293 +421,284 @@ function select_ini_file() fi # args - if [ "${ARG_INI_TRUST}" != "" ]; then + if [ ! -z "${ARG_INI_TRUST}" ]; then INI_TRUST=${ARG_INI_TRUST} fi - if [ "${ARG_INI_LOADER}" != "" ]; then + if [ ! -z "${ARG_INI_LOADER}" ]; then INI_LOADER=${ARG_INI_LOADER} fi } +function sub_commands() +{ + # skip "--" parameter, such as "--rollback-index-..." + if [[ ${CMD_ARGS} != --* ]]; then + CMD=${CMD_ARGS%-*} + ARG=${CMD_ARGS#*-} + else + CMD=${CMD_ARGS} + fi + + if [ "${ARG_TSPL}" == "tpl" -o "${ARG_TSPL}" == "spl" ]; then + ELF=`find -name u-boot-${ARG_TSPL}` + MAP=`find -name u-boot-${ARG_TSPL}.map` + SYM=`find -name u-boot-${ARG_TSPL}.sym` + else + ELF=u-boot + MAP=u-boot.map + SYM=u-boot.sym + fi + + case ${CMD} in + elf|nm) + if [ "${CMD}" == "nm" ]; then + ${TOOLCHAIN_NM} -r --size ${ELF} | less + else + if [ "${CMD}" == "elf" -a "${ARG}" == "elf" ]; then + ARG=D # default + fi + ${TOOLCHAIN_OBJDUMP} -${ARG} ${ELF} | less + fi + exit 0 + ;; + map|sym) + if [ ${CMD} == "map" ]; then + cat ${MAP} | less + else + cat ${SYM} | less + fi + exit 0 + ;; + debug) + ./scripts/rkpatch.sh ${ARG} + exit 0 + ;; + fit) + # Non-secure + ./scripts/fit-mkimg.sh --uboot-itb --boot-itb --no-vboot ${ARG_LIST_FIT} + exit 0 + ;; + uboot) + pack_uboot_image + exit 0 + ;; + trust) + pack_trust_image + exit 0 + ;; + loader) + pack_loader_image + exit 0 + ;; + itb) + pack_uboot_itb_image + exit 0 + ;; + env) + make CROSS_COMPILE=${TOOLCHAIN_GCC} envtools + exit 0 + ;; + --tpl|--spl|tpl|spl) + pack_spl_loader_image + exit 0 + ;; + *) + unwind_addr_or_continue + ;; + esac +} + +function unwind_addr_or_continue() +{ + FUNCADDR=${ARG_FUNCADDR} + RELOCOFF=${FUNCADDR#*-} + FUNCADDR=${FUNCADDR%-*} + + if [ -z $(echo ${FUNCADDR} | sed 's/[0-9,a-f,A-F,x,X,-]//g') ] && [ ${FUNCADDR} ]; then + # With prefix: '0x' or '0X' + if [ `echo ${FUNCADDR} | sed -n "/0[x,X]/p" | wc -l` -ne 0 ]; then + FUNCADDR=`echo ${FUNCADDR} | awk '{ print strtonum($0) }'` + FUNCADDR=`echo "obase=16;${FUNCADDR}"|bc | tr '[A-Z]' '[a-z]'` + fi + if [ `echo ${RELOCOFF} | sed -n "/0[x,X]/p" | wc -l` -ne 0 ] && [ ${RELOCOFF} ]; then + RELOCOFF=`echo ${RELOCOFF} | awk '{ print strtonum($0) }'` + RELOCOFF=`echo "obase=16;${RELOCOFF}"|bc | tr '[A-Z]' '[a-z]'` + fi + + # If reloc address is assigned, do sub + if [ "${FUNCADDR}" != "${RELOCOFF}" ]; then + # Hex -> Dec -> SUB -> Hex + FUNCADDR=`echo $((16#${FUNCADDR}))` + RELOCOFF=`echo $((16#${RELOCOFF}))` + FUNCADDR=$((FUNCADDR-RELOCOFF)) + FUNCADDR=$(echo "obase=16;${FUNCADDR}"|bc | tr '[A-Z]' '[a-z]') + fi + + echo + sed -n "/${FUNCADDR}/p" ${SYM} + ${TOOLCHAIN_ADDR2LINE} -e ${ELF} ${FUNCADDR} + exit 0 + fi +} + +function pack_uboot_itb_image() +{ + INI=${INI_TRUST} + if [ ! -f ${INI} ]; then + echo "ERROR: No ${INI}" + exit 1 + fi + + if [ "${ARM64_TRUSTZONE}" == "y" ]; then + BL31_ELF=`sed -n '/_bl31_/s/PATH=//p' ${INI} | tr -d '\r'` + cp ${RKBIN}/${BL31_ELF} bl31.elf + make CROSS_COMPILE=${TOOLCHAIN_GCC} u-boot.itb + echo "pack u-boot.itb okay! Input: ${INI}" + else + # TOS + TOS=`sed -n "/TOS=/s/TOS=//p" ${INI} | tr -d '\r'` + TOSTA=`sed -n "/TOSTA=/s/TOSTA=//p" ${INI} | tr -d '\r'` + if [ ! -z "${TOSTA}" ]; then + cp ${RKBIN}/${TOSTA} tee.bin + elif [ ! -z "${TOS}" ]; then + cp ${RKBIN}/${TOS} tee.bin + else + echo "ERROR: No tee bin" + exit 1 + fi + + TEE_OFFSET=`sed -n "/ADDR=/s/ADDR=//p" ${INI} | tr -d '\r'` + if [ "${TEE_OFFSET}" == "" ]; then + TEE_OFFSET=0x8400000 + fi + + # MCU + MCU_ENABLED=`awk -F"," '/MCU=/ { printf $3 }' ${INI} | tr -d ' '` + if [ "${MCU_ENABLED}" == "enabled" -o "${MCU_ENABLED}" == "okay" ]; then + MCU=`awk -F"," '/MCU=/ { printf $1 }' ${INI} | tr -d ' ' | cut -c 5-` + cp ${RKBIN}/${MCU} mcu.bin + MCU_OFFSET=`awk -F"," '/MCU=/ { printf $2 }' ${INI} | tr -d ' '` + fi + + COMPRESSION=`awk -F"," '/COMPRESSION=/ { printf $1 }' ${INI} | tr -d ' ' | cut -c 13-` + if [ -z "${COMPRESSION}" ]; then + COMPRESSION="none" + fi + + # its + SPL_FIT_SOURCE=`sed -n "/CONFIG_SPL_FIT_SOURCE=/s/CONFIG_SPL_FIT_SOURCE=//p" .config | tr -d '""'` + if [ ! -z ${SPL_FIT_SOURCE} ]; then + cp ${SPL_FIT_SOURCE} u-boot.its + else + SPL_FIT_GENERATOR=`sed -n "/CONFIG_SPL_FIT_GENERATOR=/s/CONFIG_SPL_FIT_GENERATOR=//p" .config | tr -d '""'` + if [ ! -z ${MCU_OFFSET} ]; then + ${SPL_FIT_GENERATOR} -u -t ${TEE_OFFSET} -c ${COMPRESSION} -m ${MCU_OFFSET} > u-boot.its + else + ${SPL_FIT_GENERATOR} -u -t ${TEE_OFFSET} -c ${COMPRESSION} > u-boot.its + fi + fi + + ./tools/mkimage -f u-boot.its -E u-boot.itb + echo "pack u-boot.itb okay! Input: ${INI}" + fi + echo +} + +function pack_spl_loader_image() +{ + rm *_loader_*.bin -f + cd ${RKBIN} + if [ ! -z "${ARG_SPL_BIN}" -a ! -z "${ARG_TPL_BIN}" ]; then + ${SCRIPT_SPL} --ini ${INI_LOADER} --tpl ${SRCTREE}/${ARG_TPL_BIN} --spl ${SRCTREE}/${ARG_SPL_BIN} + elif [ ! -z "${ARG_TPL_BIN}" ]; then + ${SCRIPT_SPL} --ini ${INI_LOADER} --tpl ${SRCTREE}/${ARG_TPL_BIN} + else + ${SCRIPT_SPL} --ini ${INI_LOADER} --spl ${SRCTREE}/${ARG_SPL_BIN} + fi + cd - + if [ -f ${RKBIN}/*_loader_*.bin ]; then + mv ${RKBIN}/*_loader_*.bin ./ + fi +} + +function pack_uboot_image() +{ + rm u-boot.img u-boot-dtb.img -f + LOAD_ADDR=`sed -n "/CONFIG_SYS_TEXT_BASE=/s/CONFIG_SYS_TEXT_BASE=//p" include/autoconf.mk|tr -d '\r'` + ${SCRIPT_UBOOT} --load ${LOAD_ADDR} ${PLAT_UBOOT_SIZE} +} + +function pack_loader_image() +{ + rm *_loader_*.bin -f + cd ${RKBIN} + ${SCRIPT_LOADER} --ini ${INI_LOADER} + cd - + if [ -f ${RKBIN}/*_loader_*.bin ]; then + mv ${RKBIN}/*_loader_*.bin ./ + fi +} + +function pack_trust_image() +{ + DRAM_BASE=`sed -n "/CONFIG_SYS_SDRAM_BASE=/s/CONFIG_SYS_SDRAM_BASE=//p" include/autoconf.mk|tr -d '\r'` + + rm trust*.img -f + cd ${RKBIN} + if [ "${ARM64_TRUSTZONE}" == "y" ]; then + ${SCRIPT_ATF} --ini ${INI_TRUST} ${PLAT_SHA} ${PLAT_RSA} ${PLAT_TRUST_SIZE} + else + ${SCRIPT_TOS} --ini ${INI_TRUST} --base ${DRAM_BASE} ${PLAT_TRUST_SIZE} + fi + cd - + if [ -f ${RKBIN}/trust*.img ]; then + mv ${RKBIN}/trust*.img ./ + fi +} + +function pack_fit_image() +{ + # If we don't plan to have uboot in uboot.img in case of: SPL => Trust => Kernel, creating empty files. + if [ "${ARG_NO_UBOOT}" == "y" ]; then + rm u-boot-nodtb.bin u-boot.dtb -f + touch u-boot-nodtb.bin u-boot.dtb + fi + + # Verified boot=1: must build both uboot.img and boot.img + # Verified boot=0: build uboot.img + if grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then + ./scripts/fit-mkimg.sh --uboot-itb --boot-itb ${ARG_LIST_FIT} + else + rm uboot.img trust*.img -f + ./scripts/fit-mkimg.sh --uboot-itb --no-vboot --no-rebuild ${ARG_LIST_FIT} + echo "pack uboot.img okay! Input: ${INI_TRUST}" + fi +} + function handle_args_late() { ARG_LIST_FIT="${ARG_LIST_FIT} --ini-trust ${INI_TRUST} --ini-loader ${INI_LOADER}" } -function pack_uboot_image() +function clean_files() { - if [ "${PLATFORM_TYPE}" != "RKFW" ]; then - return - fi - - # Check file size - head_kb=2 - uboot_kb=`ls -l u-boot.bin | awk '{ print $5 }'` - if [ "${PLATFORM_UBOOT_SIZE}" == "" ]; then - uboot_max_kb=1046528 - else - uboot_max_kb=`echo ${PLATFORM_UBOOT_SIZE} | awk '{print strtonum($2)}'` - uboot_max_kb=$(((uboot_max_kb-head_kb)*1024)) - fi - - if [ ${uboot_kb} -gt ${uboot_max_kb} ]; then - echo - echo "ERROR: pack uboot failed! u-boot.bin actual: ${uboot_kb} bytes, max limit: ${uboot_max_kb} bytes" - exit 1 - fi - - # Pack - uboot_load_addr=`sed -n "/CONFIG_SYS_TEXT_BASE=/s/CONFIG_SYS_TEXT_BASE=//p" include/autoconf.mk|tr -d '\r'` - if [ -z ${uboot_load_addr} ]; then - echo "ERROR: No CONFIG_SYS_TEXT_BASE for u-boot"; - exit 1 - fi - ${RKTOOLS}/loaderimage --pack --uboot u-boot.bin uboot.img ${uboot_load_addr} ${PLATFORM_UBOOT_SIZE} - rm u-boot.img u-boot-dtb.img -rf - echo "pack uboot okay! Input: u-boot.bin" -} - -function pack_uboot_itb_image() -{ - ini=${INI_TRUST} - if [ ! -f ${INI_TRUST} ]; then - echo "pack trust failed! Can't find: ${INI_TRUST}" - return - fi - - if [ "${ARM64_TRUSTZONE}" == "y" ]; then - bl31=`sed -n '/_bl31_/s/PATH=//p' ${ini} |tr -d '\r'` - cp ${RKBIN}/${bl31} bl31.elf - make CROSS_COMPILE=${TOOLCHAIN_GCC} u-boot.itb - echo "pack u-boot.itb okay! Input: ${ini}" - else - tos_image=`sed -n "/TOS=/s/TOS=//p" ${ini} |tr -d '\r'` - tosta_image=`sed -n "/TOSTA=/s/TOSTA=//p" ${ini} |tr -d '\r'` - if [ ${tosta_image} ]; then - cp ${RKBIN}/${tosta_image} tee.bin - elif [ ${tos_image} ]; then - cp ${RKBIN}/${tos_image} tee.bin - else - echo "ERROR: No any tee bin" - exit 1 - fi - - tee_offset=`sed -n "/ADDR=/s/ADDR=//p" ${ini} |tr -d '\r'` - if [ "${tee_offset}" == "" ]; then - tee_offset=0x8400000 - fi - - mcu_enabled=`awk -F"," '/MCU=/ { printf $3 }' ${ini} | tr -d ' '` - if [ "${mcu_enabled}" == "enabled" ]; then - mcu_image=`awk -F"," '/MCU=/ { printf $1 }' ${ini} | tr -d ' ' | cut -c 5-` - cp ${RKBIN}/${mcu_image} mcu.bin - mcu_offset=`awk -F"," '/MCU=/ { printf $2 }' ${ini} | tr -d ' '` - optional_mcu="-m "${mcu_offset} - else - optional_mcu= - fi - - compression=`awk -F"," '/COMPRESSION=/ { printf $1 }' ${ini} | tr -d ' ' | cut -c 13-` - if [ -z "${compression}" ]; then - compression="none" - fi - - SPL_FIT_SOURCE=`sed -n "/CONFIG_SPL_FIT_SOURCE=/s/CONFIG_SPL_FIT_SOURCE=//p" .config | tr -d '""'` - if [ ! -z ${SPL_FIT_SOURCE} ]; then - cp ${SPL_FIT_SOURCE} u-boot.its - else - SPL_FIT_GENERATOR=`sed -n "/CONFIG_SPL_FIT_GENERATOR=/s/CONFIG_SPL_FIT_GENERATOR=//p" .config | tr -d '""'` - ${SPL_FIT_GENERATOR} -u -t ${tee_offset} -c ${compression} ${optional_mcu} > u-boot.its - fi - ./tools/mkimage -f u-boot.its -E u-boot.itb - echo "pack u-boot.itb okay! Input: ${ini}" - fi - echo -} - -function pack_spl_loader_image() -{ - mode=$1 - tmpdir=${RKBIN}/tmp - tmpini=${tmpdir}/${RKCHIP_LOADER}MINIALL.ini - ini=${INI_LOADER} - if [ ! -f ${INI_LOADER} ]; then - echo "pack loader failed! Can't find: ${INI_LOADER}" - return - fi - - # Find magic for TPL - for item in "${CHIP_TPL_MAGIC_TABLE[@]}" - do - config_xxx=`echo ${item} | awk '{ print $1 }'` - if grep -q "^${config_xxx}=y" .config ; then - header=`echo ${item} | awk '{ print $2 }'` - fi - done - - if [ -z ${header} ]; then - header=`sed -n '/NAME=/s/NAME=//p' ${ini}` - fi - - # Prepare files - rm ${tmpdir} -rf && mkdir ${tmpdir} -p - cp spl/u-boot-spl.bin ${tmpdir}/ && cp ${ini} ${tmpini} - - if [ "${mode}" == "tpl-spl" ]; then # pack tpl+spl - label="TPL+SPL" - cp tpl/u-boot-tpl.bin ${tmpdir}/ - dd if=${tmpdir}/u-boot-tpl.bin of=${tmpdir}/tpl.bin bs=1 skip=4 - sed -i "1s/^/${header:0:4}/" ${tmpdir}/tpl.bin - sed -i "s/FlashData=.*$/FlashData=.\/tmp\/tpl.bin/" ${tmpini} - sed -i "0,/Path1=.*/s/Path1=.*$/Path1=.\/tmp\/tpl.bin/" ${tmpini} - sed -i "s/FlashBoot=.*$/FlashBoot=.\/tmp\/u-boot-spl.bin/" ${tmpini} - elif [ "${mode}" == "tpl" ]; then # pack tpl - label="TPL" - cp tpl/u-boot-tpl.bin ${tmpdir}/ - dd if=${tmpdir}/u-boot-tpl.bin of=${tmpdir}/tpl.bin bs=1 skip=4 - sed -i "1s/^/${header:0:4}/" ${tmpdir}/tpl.bin - sed -i "s/FlashData=.*$/FlashData=.\/tmp\/tpl.bin/" ${tmpini} - sed -i "0,/Path1=.*/s/Path1=.*$/Path1=.\/tmp\/tpl.bin/" ${tmpini} - else - label="SPL" - sed -i "s/FlashBoot=.*$/FlashBoot=.\/tmp\/u-boot-spl.bin/" ${tmpini} - fi - - # Pack - cd ${RKBIN} - ${RKTOOLS}/boot_merger ${tmpini} - - rm ${tmpdir} -rf && cd - - rm *_loader_*.bin -rf && mv ${RKBIN}/*_loader_*.bin ./ - filename=`basename *_loader_*.bin` - if [[ ${filename} != *spl* ]]; then - rename 's/loader_/spl_loader_/' *_loader_*.bin - fi - echo "pack loader(${label}) okay! Input: ${ini}" -} - -function pack_loader_image() -{ - ini=${INI_LOADER} - if [ ! -f ${INI_LOADER} ]; then - echo "pack loader failed! Can't find: ${INI_LOADER}" - return - fi - - rm *_loader_*.bin -rf - numline=`cat ${ini} | wc -l` - if [ ${numline} -eq 1 ]; then - image=`sed -n "/PATH=/p" ${ini} | tr -d '\r' | cut -d '=' -f 2` - cp ${RKBIN}/${image} ./ - else - cd ${RKBIN} - ${RKTOOLS}/boot_merger ${ini} - cd - && mv ${RKBIN}/*_loader_*.bin ./ - fi - - file=`ls *loader*.bin` - echo "pack ${file} okay! Input: ${ini}" -} - -function pack_arm32_trust_image() -{ - ini=$1 - tos_image=`sed -n "/TOS=/s/TOS=//p" ${ini} |tr -d '\r'` - tosta_image=`sed -n "/TOSTA=/s/TOSTA=//p" ${ini} |tr -d '\r'` - tee_output=`sed -n "/OUTPUT=/s/OUTPUT=//p" ${ini} |tr -d '\r'` - if [ "${tee_output}" == "" ]; then - tee_output="./trust.img" - fi - tee_offset=`sed -n "/ADDR=/s/ADDR=//p" ${ini} |tr -d '\r'` - if [ "${tee_offset}" == "" ]; then - tee_offset=0x8400000 - fi - - # OP-TEE is 132M(0x8400000) offset from DRAM base. - dram_base=`sed -n "/CONFIG_SYS_SDRAM_BASE=/s/CONFIG_SYS_SDRAM_BASE=//p" include/autoconf.mk|tr -d '\r'` - tee_load_addr=$((dram_base+tee_offset)) - tee_load_addr=$(echo "obase=16;${tee_load_addr}"|bc) # Convert Dec to Hex - - if [ ${tosta_image} ]; then - ${RKTOOLS}/loaderimage --pack --trustos ${RKBIN}/${tosta_image} ${tee_output} ${tee_load_addr} ${PLATFORM_TRUST_SIZE} - elif [ ${tos_image} ]; then - ${RKTOOLS}/loaderimage --pack --trustos ${RKBIN}/${tos_image} ${tee_output} ${tee_load_addr} ${PLATFORM_TRUST_SIZE} - else - echo "ERROR: No any tee bin" - exit 1 - fi - echo "pack trust okay! Input: ${ini}" -} - -function pack_arm64_trust_image() -{ - ini=$1 - cd ${RKBIN} - ${RKTOOLS}/trust_merger ${PLATFORM_SHA} ${PLATFORM_RSA} ${PLATFORM_TRUST_SIZE} ${ini} - cd - && mv ${RKBIN}/trust*.img ./ - echo "pack trust okay! Input: ${ini}" -} - -function pack_trust_image() -{ - if [ "${PLATFORM_TYPE}" != "RKFW" ]; then - return - fi - - rm trust*.img -rf - ini=${INI_TRUST} - if [ ! -f ${INI_TRUST} ]; then - echo "pack trust failed! Can't find: ${INI_TRUST}" - return - fi - - numline=`cat ${ini} | wc -l` - if [ ${numline} -eq 1 ]; then - image=`sed -n "/PATH=/p" ${ini} | tr -d '\r' | cut -d '=' -f 2` - cp ${RKBIN}/${image} ./trust.img - echo "pack trust okay! Input: ${ini}" - return; - else - if [ "${ARM64_TRUSTZONE}" == "y" ]; then - pack_arm64_trust_image ${ini} - else - pack_arm32_trust_image ${ini} - fi - fi -} - -function pack_fit_image() -{ - if [ "${ARG_NO_UBOOT}" == "y" ]; then - rm u-boot-nodtb.bin u-boot.dtb -rf - touch u-boot-nodtb.bin u-boot.dtb - fi - - if grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then - ./scripts/fit-mkimg.sh --uboot-itb --boot-itb ${ARG_LIST_FIT} - else - rm uboot.img trust*.img -rf - ./scripts/fit-mkimg.sh --uboot-itb --no-vboot --no-rebuild ${ARG_LIST_FIT} - echo "pack uboot.img okay! Input: ${INI_TRUST}" - fi + rm spl/u-boot-spl.dtb tpl/u-boot-tpl.dtb u-boot.dtb -f + rm spl/u-boot-spl tpl/u-boot-tpl u-boot -f } function pack_images() { - if [ "${ARG_NO_PACK}" != "y" ]; then - if [ "${PLATFORM_TYPE}" == "RKFW" ]; then - pack_uboot_image - pack_trust_image - pack_loader_image - elif [ "${PLATFORM_TYPE}" == "FIT" ]; then - pack_fit_image ${ARG_LIST_FIT} - fi + if [ "${ARG_NO_PACK}" == "y" ]; then + return fi -} -function clean_files() -{ - rm spl/u-boot-spl.dtb tpl/u-boot-tpl.dtb u-boot.dtb -rf + if [ "${PLAT_TYPE}" == "RKFW" ]; then + pack_uboot_image + pack_trust_image + pack_loader_image + elif [ "${PLAT_TYPE}" == "FIT" ]; then + pack_fit_image ${ARG_LIST_FIT} + fi } function finish() @@ -848,4 +723,3 @@ clean_files make CROSS_COMPILE=${TOOLCHAIN_GCC} all --jobs=${JOB} pack_images finish - diff --git a/scripts/atf.sh b/scripts/atf.sh new file mode 100755 index 0000000000..19b628d38d --- /dev/null +++ b/scripts/atf.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# +# Copyright (c) 2020 Rockchip Electronics Co., Ltd +# +# SPDX-License-Identifier: GPL-2.0 +# + +if [ $# -eq 0 ]; then + echo "ERROR: No args of $0" + exit 1 +fi + +while [ $# -gt 0 ]; do + case $1 in + --ini) + INI=$2 # mandory + shift 2 + ;; + --rsa) + RSA="$1 $2" + shift 2 + ;; + --sha) + SHA="$1 $2" + shift 2 + ;; + --size) + SIZE="$1 $2 $3" + shift 3 + ;; + *) + echo "ERROR: Unknown arg: $1" + exit 1 + ;; + esac +done + +if [ ! -f ${INI} ]; then + echo "pack trust failed! Can't find: ${INI}" + exit 0 +fi + +rm trust*.img -f + +COUNT=`cat ${INI} | wc -l` +if [ ${COUNT} -eq 1 ]; then + IMG=`sed -n "/PATH=/p" ${INI} | tr -d '\r' | cut -d '=' -f 2` + cp ${IMG} ./trust.img +else + ./tools/trust_merger ${INI} ${SIZE} ${SHA} ${RSA} +fi + +echo "pack trust okay! Input: ${INI}" +echo diff --git a/scripts/fit-mkimg.sh b/scripts/fit-mkimg.sh index d44c376dbf..e095f8ce40 100755 --- a/scripts/fit-mkimg.sh +++ b/scripts/fit-mkimg.sh @@ -62,7 +62,7 @@ function help() echo " --uboot-itb" echo " --boot-itb" echo " --boot_img" - echo " --p-check" + echo " --arg-check" echo } @@ -118,7 +118,7 @@ function fit_process_args() while [ $# -gt 0 ]; do case $1 in - --p-check) + --arg-check) ARG_VALIDATE=$2 shift 2 ;; @@ -188,8 +188,9 @@ function fit_process_args() function fit_rebuild() { + # Verified-boot: should rebuild code but don't need to repack images. if [ "${ARG_NO_REBUILD}" != "y" ]; then - ./make.sh --no-pack # Always no pack + ./make.sh --no-pack # Build but not pack loader/trust/uboot, etc. fi rm ${FIT_DIR} -rf @@ -198,13 +199,13 @@ function fit_rebuild() function fit_gen_uboot_itb() { - ./make.sh itb ${ARG_INI_TRUST} + ./make.sh itb ${ARG_INI_TRUST} >/dev/null 2>&1 check_its ${ITS_UBOOT} if [ "${ARG_NO_VBOOT}" == "y" ]; then ${MKIMAGE} -f ${ITS_UBOOT} -E -p ${OFFS_NS_UBOOT} ${ITB_UBOOT} -v ${ARG_VER_UBOOT} if [ "${ARG_SPL_NEW}" == "y" ]; then - ./make.sh spl-s ${ARG_INI_LOADER} + ./make.sh --spl ${ARG_INI_LOADER} echo "pack loader with new: spl/u-boot-spl.bin" else ./make.sh loader ${ARG_INI_LOADER} @@ -294,7 +295,7 @@ function fit_gen_uboot_itb() fi cat ${SPL_DTB} >> spl/u-boot-spl.bin - ./make.sh spl-s ${ARG_INI_LOADER} + ./make.sh --spl ${ARG_INI_LOADER} echo "pack loader with new: spl/u-boot-spl.bin" else ./make.sh loader ${ARG_INI_LOADER} diff --git a/scripts/loader.sh b/scripts/loader.sh new file mode 100755 index 0000000000..6939fdffae --- /dev/null +++ b/scripts/loader.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# +# Copyright (c) 2020 Rockchip Electronics Co., Ltd +# +# SPDX-License-Identifier: GPL-2.0 +# + +if [ $# -eq 0 ]; then + echo "ERROR: No args of $0" + exit 1 +fi + +while [ $# -gt 0 ]; do + case $1 in + --ini) + INI=$2 + shift 2 + ;; + *) + echo "ERROR: Unknown arg: $1" + exit 1 + ;; + esac +done + +rm *_loader_*.bin -f + +if [ ! -f ${INI} ]; then + echo "pack loader failed! Can't find: ${INI}" + exit 0 +fi + +COUNT=`cat ${INI} | wc -l` +if [ ${COUNT} -eq 1 ]; then + IMG=`sed -n "/PATH=/p" ${INI} | tr -d '\r' | cut -d '=' -f 2` + cp ${IMG} ./ +else + ./tools/boot_merger ${INI} +fi + +echo "pack loader okay! Input: ${INI}" diff --git a/scripts/spl.sh b/scripts/spl.sh new file mode 100755 index 0000000000..511b4ea77d --- /dev/null +++ b/scripts/spl.sh @@ -0,0 +1,98 @@ +#!/bin/bash +# +# Copyright (c) 2020 Rockchip Electronics Co., Ltd +# +# SPDX-License-Identifier: GPL-2.0 +# + +if [ $# -eq 0 ]; then + echo "ERROR: No args of $0" + exit 1 +fi + +while [ $# -gt 0 ]; do + case $1 in + --ini) + INI=$2 + shift 2 + ;; + --spl) + SPL_BIN=$2 + if [ ! -f ${SPL_BIN} ]; then + echo "ERROR: No ${SPL_BIN}" + exit 1 + fi + shift 2 + ;; + --tpl) + TPL_BIN=$2 + if [ ! -f ${TPL_BIN} ]; then + echo "ERROR: No ${TPL_BIN}" + exit 1 + fi + shift 2 + ;; + *) + echo "ERROR: Unknown arg: $1" + exit 1 + ;; + esac +done + +if [ ! -f ${INI} ]; then + echo "ERROR: No ${INI}" + exit 0 +fi + +if [ "${TPL_BIN}" == "" -a "${SPL_BIN}" == "" ]; then + echo "ERROR: No SPL and TPL file" + exit 0 +fi + +rm tmp -rf && mkdir tmp -p +TMP_INI="tmp/MINIALL.ini" +cp ${INI} ${TMP_INI} + +# magic +MAGIC=`sed -n '/NAME=/s/NAME=//p' ${INI}` +if [ "${MAGIC}" == "RV1126" ]; then + MAGIC="110B" +elif [ "${MAGIC}" == "RKPX30" ]; then + MAGIC="RK33" +fi + +# replace +if [ "${TPL_BIN}" != "" -a "${SPL_BIN}" != "" ]; then + cp ${TPL_BIN} tmp/u-boot-tpl.bin + cp ${SPL_BIN} tmp/u-boot-spl.bin + dd if=tmp/u-boot-tpl.bin of=tmp/tpl.bin bs=1 skip=4 + + sed -i "1s/^/${MAGIC:0:4}/" tmp/tpl.bin + sed -i "s/FlashData=.*$/FlashData=.\/tmp\/tpl.bin/" ${TMP_INI} + sed -i "0,/Path1=.*/s/Path1=.*$/Path1=.\/tmp\/tpl.bin/" ${TMP_INI} + sed -i "s/FlashBoot=.*$/FlashBoot=.\/tmp\/u-boot-spl.bin/" ${TMP_INI} + LABEL="TPL+SPL" +elif [ "${TPL_BIN}" != "" ]; then + cp ${TPL_BIN} tmp/u-boot-tpl.bin + dd if=tmp/u-boot-tpl.bin of=tmp/tpl.bin bs=1 skip=4 + sed -i "1s/^/${MAGIC:0:4}/" tmp/tpl.bin + sed -i "s/FlashData=.*$/FlashData=.\/tmp\/tpl.bin/" ${TMP_INI} + sed -i "0,/Path1=.*/s/Path1=.*$/Path1=.\/tmp\/tpl.bin/" ${TMP_INI} + LABEL="TPL" +else + cp ${SPL_BIN} tmp/u-boot-spl.bin + sed -i "s/FlashBoot=.*$/FlashBoot=.\/tmp\/u-boot-spl.bin/" ${TMP_INI} + LABEL="SPL" +fi + +rm *_loader_*.bin -f +./tools/boot_merger ${TMP_INI} + +FNAME=`basename *_loader_*.bin` +if [[ ${FNAME} != *spl* ]]; then + rename 's/loader_/spl_loader_/' *_loader_*.bin +fi +rm tmp/ -rf + +echo "pack loader(${LABEL}) okay! Input: ${INI}" +echo diff --git a/scripts/tos.sh b/scripts/tos.sh new file mode 100755 index 0000000000..056529f285 --- /dev/null +++ b/scripts/tos.sh @@ -0,0 +1,74 @@ +#!/bin/bash +# +# Copyright (c) 2020 Rockchip Electronics Co., Ltd +# +# SPDX-License-Identifier: GPL-2.0 +# + +if [ $# -eq 0 ]; then + echo "ERROR: No args of $0" + exit 1 +fi + +while [ $# -gt 0 ]; do + case $1 in + --base) + DRAM_BASE=$2 + shift 2 + ;; + --ini) + INI=$2 + shift 2 + ;; + --size) + SIZE="$1 $2 $3" + shift 3 + ;; + *) + echo "ERROR: Unknown arg: $1" + exit 1 + ;; + esac +done + +if [ ! -f ${INI} ]; then + echo "pack trust failed! Can't find: ${INI}" + exit 0 +fi + +TOS=`sed -n "/TOS=/s/TOS=//p" ${INI} | tr -d '\r'` +TOSTA=`sed -n "/TOSTA=/s/TOSTA=//p" ${INI} | tr -d '\r'` +OUTPUT=`sed -n "/OUTPUT=/s/OUTPUT=//p" ${INI} | tr -d '\r'` + +if [ -z "${OUTPUT}" ]; then + OUTPUT="./trust.img" +fi + +LOAD_OFFSET=`sed -n "/ADDR=/s/ADDR=//p" ${INI} | tr -d '\r'` +if [ -z "${LOAD_OFFSET}" ]; then + # default offset + LOAD_OFFSET=0x8400000 +fi + +LOAD_ADDR=$((DRAM_BASE+LOAD_OFFSET)) +LOAD_ADDR=$(echo "obase=16;${LOAD_ADDR}"|bc) # Convert Dec to Hex + +rm trust*.img -f + +COUNT=`cat ${INI} | wc -l` +if [ ${COUNT} -eq 1 ]; then + IMG=`sed -n "/PATH=/p" ${INI} | tr -d '\r' | cut -d '=' -f 2` + cp ${IMG} ./trust.img +else + if [ ! -z "${TOSTA}" ]; then + ./tools/loaderimage --pack --trustos ${TOSTA} ${OUTPUT} ${LOAD_ADDR} ${SIZE} + elif [ ! -z "${TOS}" ]; then + ./tools/loaderimage --pack --trustos ${TOS} ${OUTPUT} ${LOAD_ADDR} ${SIZE} + else + echo "ERROR: No tee bin" + exit 1 + fi +fi + +echo "pack trust okay! Input: ${INI}" +echo diff --git a/scripts/uboot.sh b/scripts/uboot.sh new file mode 100755 index 0000000000..d2298f3eab --- /dev/null +++ b/scripts/uboot.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# +# Copyright (c) 2020 Rockchip Electronics Co., Ltd +# +# SPDX-License-Identifier: GPL-2.0 +# + +if [ $# -eq 0 ]; then + echo "ERROR: No args of $0" + exit 1 +fi + +while [ $# -gt 0 ]; do + case $1 in + --load) + LOAD_ADDR=$2 + shift 2 + ;; + --size) + SIZE="$1 $2 $3" + shift 3 + ;; + *) + echo "ERROR: Unknown arg: $1" + exit 1 + ;; + esac +done + +rm uboot.img -f + +if [ -z "${LOAD_ADDR}" ]; then + echo "ERROR: No load address" + exit 1 +fi + +HEAD_KB=2 +BIN_KB=`ls -l u-boot.bin | awk '{ print $5 }'` +if [ -z "${SIZE}" ]; then + MAX_KB=1046528 +else + MAX_KB=`echo ${SIZE} | awk '{print strtonum($2)}'` + MAX_KB=$(((MAX_KB-HEAD_KB)*1024)) +fi + +if [ ${BIN_KB} -gt ${MAX_KB} ]; then + echo "ERROR: pack uboot failed! u-boot.bin actual: ${BIN_KB} bytes, max limit: ${MAX_KB} bytes" + exit 1 +fi + +./tools/loaderimage --pack --uboot u-boot.bin uboot.img ${LOAD_ADDR} ${SIZE} +echo "pack uboot okay! Input: u-boot.bin" +echo