11e9dc3b8SJoseph Chen#!/bin/bash 21e9dc3b8SJoseph Chen# 31e9dc3b8SJoseph Chen# Copyright (c) 2022 Rockchip Electronics Co., Ltd 41e9dc3b8SJoseph Chen# 51e9dc3b8SJoseph Chen# SPDX-License-Identifier: GPL-2.0 61e9dc3b8SJoseph Chen# 71e9dc3b8SJoseph Chenset -e 81e9dc3b8SJoseph Chen 91e9dc3b8SJoseph ChenFIT_DIR="fit" 101e9dc3b8SJoseph ChenIMG_UBOOT="uboot.img" 111e9dc3b8SJoseph ChenIMG_BOOT="boot.img" 121e9dc3b8SJoseph ChenIMG_RECOVERY="recovery.img" 131e9dc3b8SJoseph ChenITB_UBOOT="${FIT_DIR}/uboot.itb" 141e9dc3b8SJoseph ChenITB_BOOT="${FIT_DIR}/boot.itb" 151e9dc3b8SJoseph ChenITB_RECOVERY="${FIT_DIR}/recovery.itb" 161e9dc3b8SJoseph ChenSIG_BIN="data2sign.bin" 171e9dc3b8SJoseph ChenSIG_UBOOT="${FIT_DIR}/uboot.data2sign" 181e9dc3b8SJoseph ChenSIG_BOOT="${FIT_DIR}/boot.data2sign" 191e9dc3b8SJoseph ChenSIG_RECOVERY="${FIT_DIR}/recovery.data2sign" 20*554ddf99SXuhui LinSIG_CFG_DIR="${FIT_DIR}/fit_signcfg" 21*554ddf99SXuhui LinSIG_CONFIG="${SIG_CFG_DIR}/sign.readonly_config" 22*554ddf99SXuhui LinMINIALL_INI="${SIG_CFG_DIR}/MINIALL.ini" 231e9dc3b8SJoseph Chen# offs 240644ce13SXuhui LinOFFS_DATA="0x1200" 251e9dc3b8SJoseph Chen# placeholder address 261e9dc3b8SJoseph ChenFDT_ADDR_PLACEHOLDER="0xffffff00" 271e9dc3b8SJoseph ChenKERNEL_ADDR_PLACEHOLDER="0xffffff01" 281e9dc3b8SJoseph ChenRAMDISK_ADDR_PLACEHOLDER="0xffffff02" 291e9dc3b8SJoseph Chen# tools 301e9dc3b8SJoseph ChenMKIMAGE="./tools/mkimage" 311e9dc3b8SJoseph ChenRK_SIGN_TOOL="../rkbin/tools/rk_sign_tool" 321e9dc3b8SJoseph ChenFIT_UNPACK="./scripts/fit-unpack.sh" 331e9dc3b8SJoseph ChenCHECK_SIGN="./tools/fit_check_sign" 341e9dc3b8SJoseph Chen# key 351e9dc3b8SJoseph ChenKEY_DIR="keys/" 361e9dc3b8SJoseph ChenRSA_PRI_KEY="keys/dev.key" 371e9dc3b8SJoseph ChenRSA_PUB_KEY="keys/dev.pubkey" 381e9dc3b8SJoseph ChenRSA_CRT_KEY="keys/dev.crt" 391e9dc3b8SJoseph ChenSIGNATURE_KEY_NODE="/signature/key-dev" 401e9dc3b8SJoseph ChenSPL_DTB="spl/u-boot-spl.dtb" 411e9dc3b8SJoseph ChenUBOOT_DTB="u-boot.dtb" 421e9dc3b8SJoseph Chen# its 431e9dc3b8SJoseph ChenITS_UBOOT="u-boot.its" 441e9dc3b8SJoseph ChenITS_BOOT="boot.its" 451e9dc3b8SJoseph ChenITS_RECOVERY="recovery.its" 461e9dc3b8SJoseph ChenARG_VER_UBOOT="0" 471e9dc3b8SJoseph ChenARG_VER_BOOT="0" 481e9dc3b8SJoseph ChenARG_VER_RECOVERY="0" 491e9dc3b8SJoseph Chen 501e9dc3b8SJoseph Chenfunction help() 511e9dc3b8SJoseph Chen{ 521e9dc3b8SJoseph Chen echo 531e9dc3b8SJoseph Chen echo "usage:" 541e9dc3b8SJoseph Chen echo " $0 [args]" 551e9dc3b8SJoseph Chen echo 561e9dc3b8SJoseph Chen echo "args:" 571e9dc3b8SJoseph Chen echo " --rollback-index-recovery <decimal integer>" 581e9dc3b8SJoseph Chen echo " --rollback-index-boot <decimal integer>" 591e9dc3b8SJoseph Chen echo " --rollback-index-uboot <decimal integer>" 601e9dc3b8SJoseph Chen echo " --version-recovery <decimal integer>" 611e9dc3b8SJoseph Chen echo " --version-boot <decimal integer>" 621e9dc3b8SJoseph Chen echo " --version-uboot <decimal integer>" 631e9dc3b8SJoseph Chen echo " --boot_img <boot image>" 641e9dc3b8SJoseph Chen echo " --recovery_img <recovery image>" 651e9dc3b8SJoseph Chen echo " --args <arg>" 661e9dc3b8SJoseph Chen echo " --ini-loader <loader ini file>" 671e9dc3b8SJoseph Chen echo " --ini-trust <trust ini file>" 681e9dc3b8SJoseph Chen echo " --no-check" 69cb458c93SXuhui Lin echo " --no-sign" 701e9dc3b8SJoseph Chen echo " --spl-new" 711e9dc3b8SJoseph Chen echo 721e9dc3b8SJoseph Chen} 731e9dc3b8SJoseph Chen 741e9dc3b8SJoseph Chenfunction arg_check_decimal() 751e9dc3b8SJoseph Chen{ 761e9dc3b8SJoseph Chen if [ -z $1 ]; then 771e9dc3b8SJoseph Chen help 781e9dc3b8SJoseph Chen exit 1 791e9dc3b8SJoseph Chen fi 801e9dc3b8SJoseph Chen 811e9dc3b8SJoseph Chen decimal=`echo $1 |sed 's/[0-9]//g'` 821e9dc3b8SJoseph Chen if [ ! -z ${decimal} ]; then 831e9dc3b8SJoseph Chen echo "ERROR: $1 is not decimal integer" 841e9dc3b8SJoseph Chen help 851e9dc3b8SJoseph Chen exit 1 861e9dc3b8SJoseph Chen fi 871e9dc3b8SJoseph Chen} 881e9dc3b8SJoseph Chen 891e9dc3b8SJoseph Chenfunction check_its() 901e9dc3b8SJoseph Chen{ 911e9dc3b8SJoseph Chen cat $1 | while read line 921e9dc3b8SJoseph Chen do 931e9dc3b8SJoseph Chen file=`echo ${line} | sed -n "/incbin/p" | awk -F '"' '{ printf $2 }' | tr -d ' '` 941e9dc3b8SJoseph Chen if [ ! -f ${file} ]; then 951e9dc3b8SJoseph Chen echo "ERROR: No ${file}" 961e9dc3b8SJoseph Chen exit 1 971e9dc3b8SJoseph Chen fi 981e9dc3b8SJoseph Chen done 991e9dc3b8SJoseph Chen} 1001e9dc3b8SJoseph Chen 101ed912199SXuhui Linfunction check_rsa_algo() 102ed912199SXuhui Lin{ 103ed912199SXuhui Lin if grep -q '^CONFIG_FIT_ENABLE_RSA4096_SUPPORT=y' .config ; then 104ed912199SXuhui Lin rsa_algo="rsa4096" 105ed912199SXuhui Lin else 106ed912199SXuhui Lin rsa_algo="rsa2048" 107ed912199SXuhui Lin fi 108ed912199SXuhui Lin if ! grep -qr ${rsa_algo} $1 ; then 109ed912199SXuhui Lin echo "ERROR: Wrong rsa_algo in its file. It should be ${rsa_algo}." 110ed912199SXuhui Lin exit 1 111ed912199SXuhui Lin fi 112ed912199SXuhui Lin} 113ed912199SXuhui Lin 1141e9dc3b8SJoseph Chenfunction check_rsa_keys() 1151e9dc3b8SJoseph Chen{ 1161e9dc3b8SJoseph Chen if [ ! -f ${RSA_PRI_KEY} ]; then 1171e9dc3b8SJoseph Chen echo "ERROR: No ${RSA_PRI_KEY} " 1181e9dc3b8SJoseph Chen exit 1 1191e9dc3b8SJoseph Chen elif [ ! -f ${RSA_PUB_KEY} ]; then 1201e9dc3b8SJoseph Chen echo "ERROR: No ${RSA_PUB_KEY} " 1211e9dc3b8SJoseph Chen exit 1 1221e9dc3b8SJoseph Chen elif [ ! -f ${RSA_CRT_KEY} ]; then 1231e9dc3b8SJoseph Chen echo "ERROR: No ${RSA_CRT_KEY} " 1241e9dc3b8SJoseph Chen exit 1 1251e9dc3b8SJoseph Chen fi 1261e9dc3b8SJoseph Chen} 1271e9dc3b8SJoseph Chen 1281e9dc3b8SJoseph Chenfunction validate_arg() 1291e9dc3b8SJoseph Chen{ 1301e9dc3b8SJoseph Chen case $1 in 131cb458c93SXuhui Lin --no-check|--no-sign|--spl-new|--burn-key-hash) 1321e9dc3b8SJoseph Chen shift=1 1331e9dc3b8SJoseph Chen ;; 1341e9dc3b8SJoseph Chen --ini-trust|--ini-loader|--rollback-index-boot|--rollback-index-recovery|--rollback-index-uboot|--boot_img|--recovery_img|--version-uboot|--version-boot|--version-recovery|--chip) 1351e9dc3b8SJoseph Chen shift=2 1361e9dc3b8SJoseph Chen ;; 1371e9dc3b8SJoseph Chen *) 1381e9dc3b8SJoseph Chen shift=0 1391e9dc3b8SJoseph Chen ;; 1401e9dc3b8SJoseph Chen esac 1411e9dc3b8SJoseph Chen echo ${shift} 1421e9dc3b8SJoseph Chen} 1431e9dc3b8SJoseph Chen 1441e9dc3b8SJoseph Chenfunction fit_process_args() 1451e9dc3b8SJoseph Chen{ 1461e9dc3b8SJoseph Chen if [ $# -eq 0 ]; then 1471e9dc3b8SJoseph Chen help 1481e9dc3b8SJoseph Chen exit 0 1491e9dc3b8SJoseph Chen fi 1501e9dc3b8SJoseph Chen 151cb458c93SXuhui Lin if grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then 152cb458c93SXuhui Lin ARG_SIGN="y" 153cb458c93SXuhui Lin fi 154cb458c93SXuhui Lin 1551e9dc3b8SJoseph Chen while [ $# -gt 0 ]; do 1561e9dc3b8SJoseph Chen case $1 in 1571e9dc3b8SJoseph Chen --args) 1581e9dc3b8SJoseph Chen ARG_VALIDATE=$2 1591e9dc3b8SJoseph Chen shift 2 1601e9dc3b8SJoseph Chen ;; 1611e9dc3b8SJoseph Chen --boot_img) # boot.img 1621e9dc3b8SJoseph Chen ARG_BOOT_IMG=$2 1631e9dc3b8SJoseph Chen shift 2 1641e9dc3b8SJoseph Chen ;; 1651e9dc3b8SJoseph Chen --chip) 1661e9dc3b8SJoseph Chen ARG_CHIP=$2 1671e9dc3b8SJoseph Chen shift 2 1681e9dc3b8SJoseph Chen ;; 1691e9dc3b8SJoseph Chen --recovery_img) # recovery.img 1701e9dc3b8SJoseph Chen ARG_RECOVERY_IMG=$2 1711e9dc3b8SJoseph Chen shift 2 1721e9dc3b8SJoseph Chen ;; 1731e9dc3b8SJoseph Chen --boot_img_dir) # boot.img components directory 1741e9dc3b8SJoseph Chen ARG_BOOT_IMG_DIR=$2 1751e9dc3b8SJoseph Chen shift 2 1761e9dc3b8SJoseph Chen ;; 1771e9dc3b8SJoseph Chen --no-check) # No hostcc fit signature check 1781e9dc3b8SJoseph Chen ARG_NO_CHECK="y" 1791e9dc3b8SJoseph Chen shift 1 1801e9dc3b8SJoseph Chen ;; 181cb458c93SXuhui Lin --no-sign) 182cb458c93SXuhui Lin ARG_NO_SIGN="y" 183cb458c93SXuhui Lin ARG_SIGN="n" 184cb458c93SXuhui Lin shift 1 185cb458c93SXuhui Lin ;; 1861e9dc3b8SJoseph Chen --ini-trust) # Assign trust ini file 1871e9dc3b8SJoseph Chen ARG_INI_TRUST=$2 1881e9dc3b8SJoseph Chen shift 2 1891e9dc3b8SJoseph Chen ;; 1901e9dc3b8SJoseph Chen --ini-loader) # Assign loader ini file 1911e9dc3b8SJoseph Chen ARG_INI_LOADER=$2 1921e9dc3b8SJoseph Chen shift 2 1931e9dc3b8SJoseph Chen ;; 1941e9dc3b8SJoseph Chen --spl-new) # Use current build u-boot-spl.bin to pack loader 1951e9dc3b8SJoseph Chen ARG_SPL_NEW="y" 1961e9dc3b8SJoseph Chen shift 1 1971e9dc3b8SJoseph Chen ;; 1981e9dc3b8SJoseph Chen --rollback-index-boot) 1991e9dc3b8SJoseph Chen ARG_ROLLBACK_IDX_BOOT=$2 2001e9dc3b8SJoseph Chen arg_check_decimal $2 2011e9dc3b8SJoseph Chen shift 2 2021e9dc3b8SJoseph Chen ;; 2031e9dc3b8SJoseph Chen --rollback-index-recovery) 2041e9dc3b8SJoseph Chen ARG_ROLLBACK_IDX_RECOVERY=$2 2051e9dc3b8SJoseph Chen arg_check_decimal $2 2061e9dc3b8SJoseph Chen shift 2 2071e9dc3b8SJoseph Chen ;; 2081e9dc3b8SJoseph Chen --rollback-index-uboot) 2091e9dc3b8SJoseph Chen ARG_ROLLBACK_IDX_UBOOT=$2 2101e9dc3b8SJoseph Chen arg_check_decimal $2 2111e9dc3b8SJoseph Chen shift 2 2121e9dc3b8SJoseph Chen ;; 2131e9dc3b8SJoseph Chen --version-uboot) 2141e9dc3b8SJoseph Chen ARG_VER_UBOOT=$2 2151e9dc3b8SJoseph Chen arg_check_decimal $2 2161e9dc3b8SJoseph Chen shift 2 2171e9dc3b8SJoseph Chen ;; 2181e9dc3b8SJoseph Chen --version-boot) 2191e9dc3b8SJoseph Chen ARG_VER_BOOT=$2 2201e9dc3b8SJoseph Chen arg_check_decimal $2 2211e9dc3b8SJoseph Chen shift 2 2221e9dc3b8SJoseph Chen ;; 2231e9dc3b8SJoseph Chen --version-recovery) 2241e9dc3b8SJoseph Chen ARG_VER_RECOVERY=$2 2251e9dc3b8SJoseph Chen arg_check_decimal $2 2261e9dc3b8SJoseph Chen shift 2 2271e9dc3b8SJoseph Chen ;; 2281e9dc3b8SJoseph Chen --burn-key-hash) 2291e9dc3b8SJoseph Chen ARG_BURN_KEY_HASH="y" 2301e9dc3b8SJoseph Chen shift 1 2311e9dc3b8SJoseph Chen ;; 2321e9dc3b8SJoseph Chen *) 2331e9dc3b8SJoseph Chen help 2341e9dc3b8SJoseph Chen exit 1 2351e9dc3b8SJoseph Chen ;; 2361e9dc3b8SJoseph Chen esac 2371e9dc3b8SJoseph Chen done 2381e9dc3b8SJoseph Chen} 2391e9dc3b8SJoseph Chen 2401e9dc3b8SJoseph Chenfunction fit_raw_compile() 2411e9dc3b8SJoseph Chen{ 2421e9dc3b8SJoseph Chen # Verified-boot: should rebuild code but don't need to repack images. 2431e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" == "y" ]; then 2441e9dc3b8SJoseph Chen ./make.sh --raw-compile 2451e9dc3b8SJoseph Chen fi 246*554ddf99SXuhui Lin rm ${FIT_DIR} -rf && mkdir -p ${FIT_DIR} && mkdir -p ${SIG_CFG_DIR} 2471e9dc3b8SJoseph Chen} 2481e9dc3b8SJoseph Chen 2491e9dc3b8SJoseph Chenfunction fit_gen_uboot_itb() 2501e9dc3b8SJoseph Chen{ 2511e9dc3b8SJoseph Chen # generate u-boot.its file 2521e9dc3b8SJoseph Chen ./make.sh itb ${ARG_INI_TRUST} 2531e9dc3b8SJoseph Chen 2541e9dc3b8SJoseph Chen # check existance of file in its 2551e9dc3b8SJoseph Chen check_its ${ITS_UBOOT} 2561e9dc3b8SJoseph Chen 2571e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 2581e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_UBOOT} -E -p ${OFFS_DATA} ${ITB_UBOOT} -v ${ARG_VER_UBOOT} 2591e9dc3b8SJoseph Chen if [ "${ARG_SPL_NEW}" == "y" ]; then 2601e9dc3b8SJoseph Chen ./make.sh --spl ${ARG_INI_LOADER} 2611e9dc3b8SJoseph Chen echo "pack loader with new: spl/u-boot-spl.bin" 2621e9dc3b8SJoseph Chen else 2631e9dc3b8SJoseph Chen ./make.sh loader ${ARG_INI_LOADER} 2641e9dc3b8SJoseph Chen fi 2651e9dc3b8SJoseph Chen else 2661e9dc3b8SJoseph Chen check_rsa_keys 2671e9dc3b8SJoseph Chen 2681e9dc3b8SJoseph Chen if ! grep -q '^CONFIG_SPL_FIT_SIGNATURE=y' .config ; then 2691e9dc3b8SJoseph Chen echo "ERROR: CONFIG_SPL_FIT_SIGNATURE is disabled" 2701e9dc3b8SJoseph Chen exit 1 2711e9dc3b8SJoseph Chen fi 2721e9dc3b8SJoseph Chen 2731e9dc3b8SJoseph Chen # rollback-index 2741e9dc3b8SJoseph Chen if grep -q '^CONFIG_SPL_FIT_ROLLBACK_PROTECT=y' .config ; then 2751e9dc3b8SJoseph Chen ARG_SPL_ROLLBACK_PROTECT="y" 2761e9dc3b8SJoseph Chen if [ -z ${ARG_ROLLBACK_IDX_UBOOT} ]; then 2771e9dc3b8SJoseph Chen echo "ERROR: No arg \"--rollback-index-uboot <n>\"" 2781e9dc3b8SJoseph Chen exit 1 2791e9dc3b8SJoseph Chen fi 2801e9dc3b8SJoseph Chen fi 2811e9dc3b8SJoseph Chen 2821e9dc3b8SJoseph Chen if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then 2831e9dc3b8SJoseph Chen VERSION=`grep 'rollback-index' ${ITS_UBOOT} | awk -F '=' '{ printf $2 }' | tr -d ' '` 2841e9dc3b8SJoseph Chen sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_UBOOT}>;/g" ${ITS_UBOOT} 2851e9dc3b8SJoseph Chen fi 2861e9dc3b8SJoseph Chen 2871e9dc3b8SJoseph Chen # Generally, boot.img is signed before uboot.img, so the ras key can be found 2881e9dc3b8SJoseph Chen # in u-boot.dtb. If not found, let's insert rsa key anyway. 2891e9dc3b8SJoseph Chen if ! fdtget -l ${UBOOT_DTB} /signature >/dev/null 2>&1 ; then 2901e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_UBOOT} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT} 2911e9dc3b8SJoseph Chen echo "## Adding RSA public key into ${UBOOT_DTB}" 2921e9dc3b8SJoseph Chen fi 2931e9dc3b8SJoseph Chen 2941e9dc3b8SJoseph Chen # Pack 2951e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_UBOOT} -k ${KEY_DIR} -K ${SPL_DTB} -E -p ${OFFS_DATA} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT} 2961e9dc3b8SJoseph Chen mv ${SIG_BIN} ${SIG_UBOOT} 2971e9dc3b8SJoseph Chen 2981e9dc3b8SJoseph Chen # burn-key-hash 2991e9dc3b8SJoseph Chen if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then 3001e9dc3b8SJoseph Chen if grep -q '^CONFIG_SPL_FIT_HW_CRYPTO=y' .config ; then 3011e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} burn-key-hash 0x1 3021e9dc3b8SJoseph Chen else 3031e9dc3b8SJoseph Chen echo "ERROR: --burn-key-hash requires CONFIG_SPL_FIT_HW_CRYPTO=y" 3041e9dc3b8SJoseph Chen exit 1 3051e9dc3b8SJoseph Chen fi 3061e9dc3b8SJoseph Chen fi 3071e9dc3b8SJoseph Chen 3081e9dc3b8SJoseph Chen # rollback-index read back check 3091e9dc3b8SJoseph Chen if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then 3101e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_UBOOT} /configurations/conf rollback-index` 3111e9dc3b8SJoseph Chen if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_UBOOT}" ]; then 3121e9dc3b8SJoseph Chen echo "ERROR: Failed to set rollback-index for ${ITB_UBOOT}"; 3131e9dc3b8SJoseph Chen exit 1 3141e9dc3b8SJoseph Chen fi 3151e9dc3b8SJoseph Chen fi 3161e9dc3b8SJoseph Chen 3171e9dc3b8SJoseph Chen # burn-key-hash read back check 3181e9dc3b8SJoseph Chen if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then 3191e9dc3b8SJoseph Chen if [ "`fdtget -ti ${SPL_DTB} ${SIGNATURE_KEY_NODE} burn-key-hash`" != "1" ]; then 3201e9dc3b8SJoseph Chen echo "ERROR: Failed to set burn-key-hash for ${SPL_DTB}"; 3211e9dc3b8SJoseph Chen exit 1 3221e9dc3b8SJoseph Chen fi 3231e9dc3b8SJoseph Chen fi 3241e9dc3b8SJoseph Chen 3251e9dc3b8SJoseph Chen # host check signature 3261e9dc3b8SJoseph Chen if [ "${ARG_NO_CHECK}" != "y" ]; then 3271e9dc3b8SJoseph Chen if [ "${ARG_SPL_NEW}" == "y" ]; then 3281e9dc3b8SJoseph Chen ${CHECK_SIGN} -f ${ITB_UBOOT} -k ${SPL_DTB} -s 3291e9dc3b8SJoseph Chen else 3301e9dc3b8SJoseph Chen spl_file="../rkbin/"`sed -n "/FlashBoot=/s/FlashBoot=//p" ${ARG_INI_LOADER} |tr -d '\r'` 3311e9dc3b8SJoseph Chen offs=`fdtdump -s ${spl_file} | head -1 | awk -F ":" '{ print $2 }' | sed "s/ found fdt at offset //g" | tr -d " "` 3321e9dc3b8SJoseph Chen if [ -z ${offs} ]; then 3331e9dc3b8SJoseph Chen echo "ERROR: invalid ${spl_file} , unable to find fdt blob" 3341e9dc3b8SJoseph Chen fi 3351e9dc3b8SJoseph Chen offs=`printf %d ${offs} ` # hex -> dec 3361e9dc3b8SJoseph Chen dd if=${spl_file} of=spl/u-boot-spl-old.dtb bs=${offs} skip=1 >/dev/null 2>&1 3371e9dc3b8SJoseph Chen ${CHECK_SIGN} -f ${ITB_UBOOT} -k spl/u-boot-spl-old.dtb -s 3381e9dc3b8SJoseph Chen fi 3391e9dc3b8SJoseph Chen fi 3401e9dc3b8SJoseph Chen 3411e9dc3b8SJoseph Chen # minimize u-boot-spl.dtb: clear as 0 but not remove property. 3421e9dc3b8SJoseph Chen if grep -q '^CONFIG_SPL_FIT_HW_CRYPTO=y' .config ; then 3431e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0 3441e9dc3b8SJoseph Chen if grep -q '^CONFIG_SPL_ROCKCHIP_CRYPTO_V1=y' .config ; then 3451e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 3461e9dc3b8SJoseph Chen fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@np 3471e9dc3b8SJoseph Chen else 3481e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 3491e9dc3b8SJoseph Chen fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@c 3501e9dc3b8SJoseph Chen fi 3511e9dc3b8SJoseph Chen else 3521e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 3531e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 3541e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0 3551e9dc3b8SJoseph Chen fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@c 3561e9dc3b8SJoseph Chen fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@np 3571e9dc3b8SJoseph Chen fi 3581e9dc3b8SJoseph Chen 3591e9dc3b8SJoseph Chen # repack spl 3601e9dc3b8SJoseph Chen if [ "${ARG_SPL_NEW}" == "y" ]; then 3611e9dc3b8SJoseph Chen cat spl/u-boot-spl-nodtb.bin > spl/u-boot-spl.bin 3621e9dc3b8SJoseph Chen if ! grep -q '^CONFIG_SPL_SEPARATE_BSS=y' .config ; then 3631e9dc3b8SJoseph Chen cat spl/u-boot-spl-pad.bin >> spl/u-boot-spl.bin 3641e9dc3b8SJoseph Chen fi 3651e9dc3b8SJoseph Chen cat ${SPL_DTB} >> spl/u-boot-spl.bin 3661e9dc3b8SJoseph Chen 3671e9dc3b8SJoseph Chen ./make.sh --spl ${ARG_INI_LOADER} 3681e9dc3b8SJoseph Chen echo "## pack loader with new: spl/u-boot-spl.bin" 3691e9dc3b8SJoseph Chen else 3701e9dc3b8SJoseph Chen ./make.sh loader ${ARG_INI_LOADER} 3711e9dc3b8SJoseph Chen fi 3721e9dc3b8SJoseph Chen 3731e9dc3b8SJoseph Chen if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then 3741e9dc3b8SJoseph Chen echo "## ${SPL_DTB}: burn-key-hash=1" 3751e9dc3b8SJoseph Chen fi 3761e9dc3b8SJoseph Chen fi 3771e9dc3b8SJoseph Chen 3781e9dc3b8SJoseph Chen rm -f u-boot.itb u-boot.img u-boot-dtb.img 3791e9dc3b8SJoseph Chen mv ${ITS_UBOOT} ${FIT_DIR} 3801e9dc3b8SJoseph Chen} 3811e9dc3b8SJoseph Chen 3821e9dc3b8SJoseph Chenfunction fit_gen_boot_itb() 3831e9dc3b8SJoseph Chen{ 3841e9dc3b8SJoseph Chen if [ ! -z ${ARG_BOOT_IMG} ]; then 3851e9dc3b8SJoseph Chen ${FIT_UNPACK} -f ${ARG_BOOT_IMG} -o ${FIT_DIR}/unpack 3861e9dc3b8SJoseph Chen ITS_BOOT="${FIT_DIR}/unpack/image.its" 3871e9dc3b8SJoseph Chen else 3881e9dc3b8SJoseph Chen compression=`awk -F"," '/COMPRESSION=/ { printf $1 }' ${ARG_INI_TRUST} | tr -d ' ' | cut -c 13-` 3891e9dc3b8SJoseph Chen if [ -z "${compression}" ]; then 3901e9dc3b8SJoseph Chen compression="none" 3911e9dc3b8SJoseph Chen fi 3921e9dc3b8SJoseph Chen ./arch/arm/mach-rockchip/make_fit_boot.sh -c ${compression} > ${ITS_BOOT} 3931e9dc3b8SJoseph Chen check_its ${ITS_BOOT} 3941e9dc3b8SJoseph Chen fi 3951e9dc3b8SJoseph Chen 3961e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 3971e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_BOOT} -E -p ${OFFS_DATA} ${ITB_BOOT} -v ${ARG_VER_BOOT} 3981e9dc3b8SJoseph Chen else 3991e9dc3b8SJoseph Chen check_rsa_keys 4001e9dc3b8SJoseph Chen 401ed912199SXuhui Lin check_rsa_algo ${ITS_BOOT} 402ed912199SXuhui Lin 403cb458c93SXuhui Lin if [ "${ARG_SIGN}" != "y" ]; then 4041e9dc3b8SJoseph Chen echo "ERROR: CONFIG_FIT_SIGNATURE is disabled" 4051e9dc3b8SJoseph Chen exit 1 4061e9dc3b8SJoseph Chen fi 4071e9dc3b8SJoseph Chen 4081e9dc3b8SJoseph Chen if grep -q '^CONFIG_FIT_ROLLBACK_PROTECT=y' .config ; then 4091e9dc3b8SJoseph Chen ARG_ROLLBACK_PROTECT="y" 4101e9dc3b8SJoseph Chen if [ -z ${ARG_ROLLBACK_IDX_BOOT} ]; then 4111e9dc3b8SJoseph Chen echo "ERROR: No arg \"--rollback-index-boot <n>\"" 4121e9dc3b8SJoseph Chen exit 1 4131e9dc3b8SJoseph Chen fi 4141ebfa2d7SJoseph Chen if ! grep -q '^CONFIG_OPTEE_CLIENT=y' .config ; then 4151ebfa2d7SJoseph Chen echo "ERROR: Don't support \"--rollback-index-boot <n>\"" 4161ebfa2d7SJoseph Chen exit 1 4171ebfa2d7SJoseph Chen fi 4181e9dc3b8SJoseph Chen fi 4191e9dc3b8SJoseph Chen 4201e9dc3b8SJoseph Chen # fixup 421d1627df0SJoseph Chen FDT_ADDR_R=`strings env/built-in.o | grep 'fdt_addr_r=' | awk -F "=" '{ print $2 }'` 422d1627df0SJoseph Chen KERNEL_ADDR_R=`strings env/built-in.o | grep 'kernel_addr_r=' | awk -F "=" '{ print $2 }'` 423d1627df0SJoseph Chen RMADISK_ADDR_R=`strings env/built-in.o | grep 'ramdisk_addr_r=' | awk -F "=" '{ print $2 }'` 424a08b0b01SJoseph Chen sed -i "s/${FDT_ADDR_PLACEHOLDER}/${FDT_ADDR_R}/g" ${ITS_BOOT} 4251e9dc3b8SJoseph Chen sed -i "s/${KERNEL_ADDR_PLACEHOLDER}/${KERNEL_ADDR_R}/g" ${ITS_BOOT} 4261e9dc3b8SJoseph Chen sed -i "s/${RAMDISK_ADDR_PLACEHOLDER}/${RMADISK_ADDR_R}/g" ${ITS_BOOT} 4271e9dc3b8SJoseph Chen if grep -q '^CONFIG_ARM64=y' .config ; then 4281e9dc3b8SJoseph Chen sed -i 's/arch = "arm";/arch = "arm64";/g' ${ITS_BOOT} 4291e9dc3b8SJoseph Chen fi 4301e9dc3b8SJoseph Chen 4311e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 4321e9dc3b8SJoseph Chen VERSION=`grep 'rollback-index' ${ITS_BOOT} | awk -F '=' '{ printf $2 }' | tr -d ' '` 4331e9dc3b8SJoseph Chen sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_BOOT}>;/g" ${ITS_BOOT} 4341e9dc3b8SJoseph Chen fi 4351e9dc3b8SJoseph Chen 4361e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_BOOT} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_BOOT} -v ${ARG_VER_BOOT} 4371e9dc3b8SJoseph Chen mv ${SIG_BIN} ${SIG_BOOT} 4381e9dc3b8SJoseph Chen 4391e9dc3b8SJoseph Chen # rollback-index read back check 4401e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 4411e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_BOOT} /configurations/conf rollback-index` 4421e9dc3b8SJoseph Chen if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_BOOT}" ]; then 4431e9dc3b8SJoseph Chen echo "ERROR: Failed to set rollback-index for ${ITB_BOOT}"; 4441e9dc3b8SJoseph Chen exit 1 4451e9dc3b8SJoseph Chen fi 4461e9dc3b8SJoseph Chen fi 4471e9dc3b8SJoseph Chen 4481e9dc3b8SJoseph Chen # host check signature 4491e9dc3b8SJoseph Chen if [ "${ARG_NO_CHECK}" != "y" ]; then 4501e9dc3b8SJoseph Chen ${CHECK_SIGN} -f ${ITB_BOOT} -k ${UBOOT_DTB} 4511e9dc3b8SJoseph Chen fi 4521e9dc3b8SJoseph Chen 4531e9dc3b8SJoseph Chen # minimize u-boot.dtb: clearn as 0 but not remove property. 4541e9dc3b8SJoseph Chen if grep -q '^CONFIG_FIT_HW_CRYPTO=y' .config ; then 4551e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0 4561e9dc3b8SJoseph Chen if grep -q '^CONFIG_ROCKCHIP_CRYPTO_V1=y' .config ; then 4571e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 4581e9dc3b8SJoseph Chen else 4591e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 4601e9dc3b8SJoseph Chen fi 4611e9dc3b8SJoseph Chen else 4621e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 4631e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 4641e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0 4651e9dc3b8SJoseph Chen fi 4661e9dc3b8SJoseph Chen fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@c 4671e9dc3b8SJoseph Chen fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@np 4681e9dc3b8SJoseph Chen fi 4691e9dc3b8SJoseph Chen 4701e9dc3b8SJoseph Chen mv ${ITS_BOOT} ${FIT_DIR} 4711e9dc3b8SJoseph Chen} 4721e9dc3b8SJoseph Chen 4731e9dc3b8SJoseph Chenfunction fit_gen_recovery_itb() 4741e9dc3b8SJoseph Chen{ 4751e9dc3b8SJoseph Chen if [ ! -z ${ARG_RECOVERY_IMG} ]; then 4761e9dc3b8SJoseph Chen ${FIT_UNPACK} -f ${ARG_RECOVERY_IMG} -o ${FIT_DIR}/unpack 4771e9dc3b8SJoseph Chen ITS_RECOVERY="${FIT_DIR}/unpack/image.its" 4781e9dc3b8SJoseph Chen else 4791e9dc3b8SJoseph Chen echo "ERROR: No recovery.img" 4801e9dc3b8SJoseph Chen exit 1 4811e9dc3b8SJoseph Chen fi 4821e9dc3b8SJoseph Chen 4831e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 4841e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_RECOVERY} -E -p ${OFFS_DATA} ${ITB_RECOVERY} -v ${ARG_VER_RECOVERY} 4851e9dc3b8SJoseph Chen else 4861e9dc3b8SJoseph Chen check_rsa_keys 4871e9dc3b8SJoseph Chen 488ed912199SXuhui Lin check_rsa_algo ${ITS_RECOVERY} 489ed912199SXuhui Lin 490cb458c93SXuhui Lin if [ "${ARG_SIGN}" != "y" ]; then 4911e9dc3b8SJoseph Chen echo "ERROR: CONFIG_FIT_SIGNATURE is disabled" 4921e9dc3b8SJoseph Chen exit 1 4931e9dc3b8SJoseph Chen fi 4941e9dc3b8SJoseph Chen 4951e9dc3b8SJoseph Chen if grep -q '^CONFIG_FIT_ROLLBACK_PROTECT=y' .config ; then 4961e9dc3b8SJoseph Chen ARG_ROLLBACK_PROTECT="y" 4971e9dc3b8SJoseph Chen if [ -z ${ARG_ROLLBACK_IDX_RECOVERY} ]; then 4981e9dc3b8SJoseph Chen echo "ERROR: No arg \"--rollback-index-recovery <n>\"" 4991e9dc3b8SJoseph Chen exit 1 5001e9dc3b8SJoseph Chen fi 5011ebfa2d7SJoseph Chen if ! grep -q '^CONFIG_OPTEE_CLIENT=y' .config ; then 5021ebfa2d7SJoseph Chen echo "ERROR: Don't support \"--rollback-index-recovery <n>\"" 5031ebfa2d7SJoseph Chen exit 1 5041ebfa2d7SJoseph Chen fi 5051e9dc3b8SJoseph Chen fi 5061e9dc3b8SJoseph Chen 5071e9dc3b8SJoseph Chen # fixup 508d1627df0SJoseph Chen FDT_ADDR_R=`strings env/built-in.o | grep 'fdt_addr_r=' | awk -F "=" '{ print $2 }'` 509d1627df0SJoseph Chen KERNEL_ADDR_R=`strings env/built-in.o | grep 'kernel_addr_r=' | awk -F "=" '{ print $2 }'` 510d1627df0SJoseph Chen RMADISK_ADDR_R=`strings env/built-in.o | grep 'ramdisk_addr_r=' | awk -F "=" '{ print $2 }'` 5111e9dc3b8SJoseph Chen sed -i "s/${FDT_ADDR_PLACEHOLDER}/${FDT_ADDR_R}/g" ${ITS_RECOVERY} 5121e9dc3b8SJoseph Chen sed -i "s/${KERNEL_ADDR_PLACEHOLDER}/${KERNEL_ADDR_R}/g" ${ITS_RECOVERY} 5131e9dc3b8SJoseph Chen sed -i "s/${RAMDISK_ADDR_PLACEHOLDER}/${RMADISK_ADDR_R}/g" ${ITS_RECOVERY} 5141e9dc3b8SJoseph Chen if grep -q '^CONFIG_ARM64=y' .config ; then 5151e9dc3b8SJoseph Chen sed -i 's/arch = "arm";/arch = "arm64";/g' ${ITS_RECOVERY} 5161e9dc3b8SJoseph Chen fi 5171e9dc3b8SJoseph Chen 5181e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 5191e9dc3b8SJoseph Chen VERSION=`grep 'rollback-index' ${ITS_RECOVERY} | awk -F '=' '{ printf $2 }' | tr -d ' '` 5201e9dc3b8SJoseph Chen sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_RECOVERY}>;/g" ${ITS_RECOVERY} 5211e9dc3b8SJoseph Chen fi 5221e9dc3b8SJoseph Chen 5231e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_RECOVERY} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_RECOVERY} -v ${ARG_VER_RECOVERY} 5241e9dc3b8SJoseph Chen mv ${SIG_BIN} ${SIG_RECOVERY} 5251e9dc3b8SJoseph Chen 5261e9dc3b8SJoseph Chen # rollback-index read back check 5271e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 5281e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_RECOVERY} /configurations/conf rollback-index` 5291e9dc3b8SJoseph Chen if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_RECOVERY}" ]; then 5301e9dc3b8SJoseph Chen echo "ERROR: Failed to set rollback-index for ${ITB_RECOVERY}"; 5311e9dc3b8SJoseph Chen exit 1 5321e9dc3b8SJoseph Chen fi 5331e9dc3b8SJoseph Chen fi 5341e9dc3b8SJoseph Chen 5351e9dc3b8SJoseph Chen # host check signature 5361e9dc3b8SJoseph Chen if [ "${ARG_NO_CHECK}" != "y" ]; then 5371e9dc3b8SJoseph Chen ${CHECK_SIGN} -f ${ITB_RECOVERY} -k ${UBOOT_DTB} 5381e9dc3b8SJoseph Chen fi 5391e9dc3b8SJoseph Chen 5401e9dc3b8SJoseph Chen # minimize u-boot.dtb: clearn as 0 but not remove property. 5411e9dc3b8SJoseph Chen if grep -q '^CONFIG_FIT_HW_CRYPTO=y' .config ; then 5421e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0 5431e9dc3b8SJoseph Chen if grep -q '^CONFIG_ROCKCHIP_CRYPTO_V1=y' .config ; then 5441e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 5451e9dc3b8SJoseph Chen else 5461e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 5471e9dc3b8SJoseph Chen fi 5481e9dc3b8SJoseph Chen else 5491e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 5501e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 5511e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0 5521e9dc3b8SJoseph Chen fi 5531e9dc3b8SJoseph Chen fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@c 5541e9dc3b8SJoseph Chen fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@np 5551e9dc3b8SJoseph Chen fi 5561e9dc3b8SJoseph Chen 5571e9dc3b8SJoseph Chen mv ${ITS_RECOVERY} ${FIT_DIR} 5581e9dc3b8SJoseph Chen} 5591e9dc3b8SJoseph Chen 5601e9dc3b8SJoseph Chenfunction fit_gen_uboot_img() 5611e9dc3b8SJoseph Chen{ 5621e9dc3b8SJoseph Chen ITB=$1 5631e9dc3b8SJoseph Chen 5641e9dc3b8SJoseph Chen if [ -z ${ITB} ]; then 5651e9dc3b8SJoseph Chen ITB=${ITB_UBOOT} 5661e9dc3b8SJoseph Chen fi 5671e9dc3b8SJoseph Chen 5681e9dc3b8SJoseph Chen ITB_MAX_NUM=`sed -n "/SPL_FIT_IMAGE_MULTIPLE/p" .config | awk -F "=" '{ print $2 }'` 5691e9dc3b8SJoseph Chen ITB_MAX_KB=`sed -n "/SPL_FIT_IMAGE_KB/p" .config | awk -F "=" '{ print $2 }'` 5701e9dc3b8SJoseph Chen ITB_MAX_BS=$((ITB_MAX_KB*1024)) 5711e9dc3b8SJoseph Chen ITB_BS=`ls -l ${ITB} | awk '{ print $5 }'` 5721e9dc3b8SJoseph Chen 5731e9dc3b8SJoseph Chen if [ ${ITB_BS} -gt ${ITB_MAX_BS} ]; then 5741e9dc3b8SJoseph Chen echo "ERROR: pack ${IMG_UBOOT} failed! ${ITB} actual: ${ITB_BS} bytes, max limit: ${ITB_MAX_BS} bytes" 5751e9dc3b8SJoseph Chen exit 1 5761e9dc3b8SJoseph Chen fi 5771e9dc3b8SJoseph Chen 5781e9dc3b8SJoseph Chen rm -f ${IMG_UBOOT} 5791e9dc3b8SJoseph Chen for ((i = 0; i < ${ITB_MAX_NUM}; i++)); 5801e9dc3b8SJoseph Chen do 5811e9dc3b8SJoseph Chen cat ${ITB} >> ${IMG_UBOOT} 5821e9dc3b8SJoseph Chen truncate -s %${ITB_MAX_KB}K ${IMG_UBOOT} 5831e9dc3b8SJoseph Chen done 5841e9dc3b8SJoseph Chen} 5851e9dc3b8SJoseph Chen 5861e9dc3b8SJoseph Chenfunction fit_gen_boot_img() 5871e9dc3b8SJoseph Chen{ 5881e9dc3b8SJoseph Chen ITB=$1 5891e9dc3b8SJoseph Chen 5901e9dc3b8SJoseph Chen if [ -z ${ITB} ]; then 5911e9dc3b8SJoseph Chen ITB=${ITB_BOOT} 5921e9dc3b8SJoseph Chen fi 5931e9dc3b8SJoseph Chen 5941e9dc3b8SJoseph Chen if [ "${ITB}" != "${IMG_BOOT}" ]; then 5951e9dc3b8SJoseph Chen cp ${ITB} ${IMG_BOOT} -f 5961e9dc3b8SJoseph Chen fi 5971e9dc3b8SJoseph Chen} 5981e9dc3b8SJoseph Chen 5991e9dc3b8SJoseph Chenfunction fit_gen_recovery_img() 6001e9dc3b8SJoseph Chen{ 6011e9dc3b8SJoseph Chen ITB=$1 6021e9dc3b8SJoseph Chen 6031e9dc3b8SJoseph Chen if [ -z ${ITB} ]; then 6041e9dc3b8SJoseph Chen ITB=${ITB_RECOVERY} 6051e9dc3b8SJoseph Chen fi 6061e9dc3b8SJoseph Chen 6071e9dc3b8SJoseph Chen if [ "${ITB}" != "${IMG_RECOVERY}" ]; then 6081e9dc3b8SJoseph Chen cp ${ITB} ${IMG_RECOVERY} -f 6091e9dc3b8SJoseph Chen fi 6101e9dc3b8SJoseph Chen} 6111e9dc3b8SJoseph Chen 6121e9dc3b8SJoseph Chenfunction fit_gen_loader() 6131e9dc3b8SJoseph Chen{ 614cb458c93SXuhui Lin if [ "${ARG_SIGN}" == "y" ]; then 6151e9dc3b8SJoseph Chen ${RK_SIGN_TOOL} cc --chip ${ARG_CHIP: 2: 6} 6161e9dc3b8SJoseph Chen ${RK_SIGN_TOOL} lk --key ${RSA_PRI_KEY} --pubkey ${RSA_PUB_KEY} 6171e9dc3b8SJoseph Chen if ls *loader*.bin >/dev/null 2>&1 ; then 6181e9dc3b8SJoseph Chen ${RK_SIGN_TOOL} sl --loader *loader*.bin 6191e9dc3b8SJoseph Chen fi 6201e9dc3b8SJoseph Chen if ls *download*.bin >/dev/null 2>&1 ; then 6211e9dc3b8SJoseph Chen ${RK_SIGN_TOOL} sl --loader *download*.bin 6221e9dc3b8SJoseph Chen fi 6231e9dc3b8SJoseph Chen if ls *idblock*.img >/dev/null 2>&1 ; then 6241e9dc3b8SJoseph Chen ${RK_SIGN_TOOL} sb --idb *idblock*.img 6251e9dc3b8SJoseph Chen fi 6261e9dc3b8SJoseph Chen fi 6271e9dc3b8SJoseph Chen} 6281e9dc3b8SJoseph Chen 6291e9dc3b8SJoseph Chenfunction fit_msg_uboot() 6301e9dc3b8SJoseph Chen{ 6311e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 6321e9dc3b8SJoseph Chen MSG_SIGN="no-signed" 6331e9dc3b8SJoseph Chen else 6341e9dc3b8SJoseph Chen MSG_SIGN="signed" 6351e9dc3b8SJoseph Chen fi 6361e9dc3b8SJoseph Chen 6371e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_UBOOT} / version` 6381e9dc3b8SJoseph Chen if [ "${VERSION}" != "" ]; then 6391e9dc3b8SJoseph Chen MSG_VER=", version=${VERSION}" 6401e9dc3b8SJoseph Chen fi 6411e9dc3b8SJoseph Chen 6421e9dc3b8SJoseph Chen if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then 6431e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_UBOOT}): ${IMG_UBOOT} (with uboot, trust...) is ready" 6441e9dc3b8SJoseph Chen else 6451e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_UBOOT} (FIT with uboot, trust...) is ready" 6461e9dc3b8SJoseph Chen fi 6471e9dc3b8SJoseph Chen} 6481e9dc3b8SJoseph Chen 6491e9dc3b8SJoseph Chenfunction fit_msg_boot() 6501e9dc3b8SJoseph Chen{ 6511e9dc3b8SJoseph Chen if [ -z "${ARG_BOOT_IMG}" ]; then 6521e9dc3b8SJoseph Chen return; 6531e9dc3b8SJoseph Chen fi 6541e9dc3b8SJoseph Chen 6551e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 6561e9dc3b8SJoseph Chen MSG_SIGN="no-signed" 6571e9dc3b8SJoseph Chen else 6581e9dc3b8SJoseph Chen MSG_SIGN="signed" 6591e9dc3b8SJoseph Chen fi 6601e9dc3b8SJoseph Chen 6611e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_BOOT} / version` 6621e9dc3b8SJoseph Chen if [ "${VERSION}" != "" ]; then 6631e9dc3b8SJoseph Chen MSG_VER=", version=${VERSION}" 6641e9dc3b8SJoseph Chen fi 6651e9dc3b8SJoseph Chen 6661e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 6671e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_BOOT}): ${IMG_BOOT} is ready" 6681e9dc3b8SJoseph Chen else 6691e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_BOOT} (FIT with kernel, fdt, resource...) is ready" 6701e9dc3b8SJoseph Chen fi 6711e9dc3b8SJoseph Chen} 6721e9dc3b8SJoseph Chen 6731e9dc3b8SJoseph Chenfunction fit_msg_recovery() 6741e9dc3b8SJoseph Chen{ 6751e9dc3b8SJoseph Chen if [ -z "${ARG_RECOVERY_IMG}" ]; then 6761e9dc3b8SJoseph Chen return; 6771e9dc3b8SJoseph Chen fi 6781e9dc3b8SJoseph Chen 6791e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 6801e9dc3b8SJoseph Chen MSG_SIGN="no-signed" 6811e9dc3b8SJoseph Chen else 6821e9dc3b8SJoseph Chen MSG_SIGN="signed" 6831e9dc3b8SJoseph Chen fi 6841e9dc3b8SJoseph Chen 6851e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_RECOVERY} / version` 6861e9dc3b8SJoseph Chen if [ "${VERSION}" != "" ]; then 6871e9dc3b8SJoseph Chen MSG_VER=", version=${VERSION}" 6881e9dc3b8SJoseph Chen fi 6891e9dc3b8SJoseph Chen 6901e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 6911e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_RECOVERY}): ${IMG_RECOVERY} is ready" 6921e9dc3b8SJoseph Chen else 6931e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_RECOVERY} (FIT with kernel, fdt, resource...) is ready" 6941e9dc3b8SJoseph Chen fi 6951e9dc3b8SJoseph Chen} 6961e9dc3b8SJoseph Chen 6971e9dc3b8SJoseph Chenfunction fit_msg_loader() 6981e9dc3b8SJoseph Chen{ 6991e9dc3b8SJoseph Chen if ls *loader*.bin >/dev/null 2>&1 ; then 7001e9dc3b8SJoseph Chen LOADER=`ls *loader*.bin` 7011e9dc3b8SJoseph Chen fi 7021e9dc3b8SJoseph Chen 7031e9dc3b8SJoseph Chen if ls *idblock*.img >/dev/null 2>&1 ; then 7041e9dc3b8SJoseph Chen LOADER=`ls *idblock*.img` 7051e9dc3b8SJoseph Chen fi 7061e9dc3b8SJoseph Chen 707cb458c93SXuhui Lin if [ "${ARG_SIGN}" == "y" ]; then 7081e9dc3b8SJoseph Chen echo "Image(signed): ${LOADER} (with spl, ddr...) is ready" 7091e9dc3b8SJoseph Chen else 7101e9dc3b8SJoseph Chen echo "Image(no-signed): ${LOADER} (with spl, ddr...) is ready" 7111e9dc3b8SJoseph Chen fi 7121e9dc3b8SJoseph Chen} 7131e9dc3b8SJoseph Chen 7141e9dc3b8SJoseph Chenfunction fit_msg_u_boot_loader() 7151e9dc3b8SJoseph Chen{ 7161e9dc3b8SJoseph Chen if ls *loader*.bin >/dev/null 2>&1 ; then 7171e9dc3b8SJoseph Chen LOADER=`ls *loader*.bin` 7181e9dc3b8SJoseph Chen fi 7191e9dc3b8SJoseph Chen 7201e9dc3b8SJoseph Chen if ls *idblock*.img >/dev/null 2>&1 ; then 7211e9dc3b8SJoseph Chen LOADER=`ls *idblock*.img` 7221e9dc3b8SJoseph Chen fi 7231e9dc3b8SJoseph Chen 724cb458c93SXuhui Lin if [ "${ARG_SIGN}" == "y" ]; then 7251e9dc3b8SJoseph Chen echo "Image(signed): ${LOADER} (with u-boot, ddr...) is ready" 7261e9dc3b8SJoseph Chen else 7271e9dc3b8SJoseph Chen echo "Image(no-signed): ${LOADER} (with u-boot, ddr...) is ready" 7281e9dc3b8SJoseph Chen fi 7291e9dc3b8SJoseph Chen} 730*554ddf99SXuhui Lin 731*554ddf99SXuhui Linfunction fit_signcfg_export() 732*554ddf99SXuhui Lin{ 733*554ddf99SXuhui Lin if [ "${ARG_NO_SIGN}" == "y" ]; then 734*554ddf99SXuhui Lin if ls *loader*.bin >/dev/null 2>&1 ; then 735*554ddf99SXuhui Lin LOADER=`ls *loader*.bin` 736*554ddf99SXuhui Lin elif ls *download*.bin >/dev/null 2>&1 ; then 737*554ddf99SXuhui Lin LOADER=`ls *download*.bin` 738*554ddf99SXuhui Lin else 739*554ddf99SXuhui Lin echo "ERROR: No loader found" 740*554ddf99SXuhui Lin exit 1 741*554ddf99SXuhui Lin fi 742*554ddf99SXuhui Lin cp ${ARG_INI_LOADER} ${MINIALL_INI} 743*554ddf99SXuhui Lin cp .config ${SIG_CONFIG} 744*554ddf99SXuhui Lin 745*554ddf99SXuhui Lin mkdir -p ${SIG_CFG_DIR}/test_images/ 746*554ddf99SXuhui Lin cp uboot.img ${SIG_CFG_DIR}/test_images/ 747*554ddf99SXuhui Lin cp ${LOADER} ${SIG_CFG_DIR}/test_images/ 748*554ddf99SXuhui Lin tar zcvf ${SIG_CFG_DIR}/test_images.tar.gz ${SIG_CFG_DIR}/test_images >/dev/null 2>&1 749*554ddf99SXuhui Lin rm -rf ${SIG_CFG_DIR}/test_images/ 750*554ddf99SXuhui Lin 751*554ddf99SXuhui Lin FDT_ADDR_R=`strings env/built-in.o | grep 'fdt_addr_r=' | awk -F "=" '{ print $2 }'` 752*554ddf99SXuhui Lin KERNEL_ADDR_R=`strings env/built-in.o | grep 'kernel_addr_r=' | awk -F "=" '{ print $2 }'` 753*554ddf99SXuhui Lin RMADISK_ADDR_R=`strings env/built-in.o | grep 'ramdisk_addr_r=' | awk -F "=" '{ print $2 }'` 754*554ddf99SXuhui Lin echo "fdt_addr_r=${FDT_ADDR_R}" >> ${SIG_CONFIG} 755*554ddf99SXuhui Lin echo "kernel_addr_r=${KERNEL_ADDR_R}" >> ${SIG_CONFIG} 756*554ddf99SXuhui Lin echo "ramdisk_addr_r=${RMADISK_ADDR_R}" >> ${SIG_CONFIG} 757*554ddf99SXuhui Lin 758*554ddf99SXuhui Lin CSUM=`sha256sum u-boot-nodtb.bin | awk '{ print $1 }'` 759*554ddf99SXuhui Lin echo "uboot_sha256sum=${CSUM}" >> ${SIG_CONFIG} 760*554ddf99SXuhui Lin CSUM=`sha256sum spl/u-boot-spl-nodtb.bin | awk '{ print $1 }'` 761*554ddf99SXuhui Lin echo "spl_sha256sum=${CSUM}" >> ${SIG_CONFIG} 762*554ddf99SXuhui Lin SIZE=`ls -l spl/u-boot-spl-nodtb.bin | awk '{ print $5 }'` 763*554ddf99SXuhui Lin echo "spl_size=${SIZE}" >> ${SIG_CONFIG} 764*554ddf99SXuhui Lin 765*554ddf99SXuhui Lin BUILD_MAIL=`git config --get user.email` 766*554ddf99SXuhui Lin BUILD_HOST=`hostname` 767*554ddf99SXuhui Lin BUILD_USER=${USER} 768*554ddf99SXuhui Lin BUILD_DATE=`date` 769*554ddf99SXuhui Lin echo "BUILD: ${BUILD_MAIL} # ${BUILD_USER}@${BUILD_HOST} # ${BUILD_DATE}" >> ${SIG_CONFIG} 770*554ddf99SXuhui Lin fi 771*554ddf99SXuhui Lin}