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" 20554ddf99SXuhui LinSIG_CFG_DIR="${FIT_DIR}/fit_signcfg" 21554ddf99SXuhui LinSIG_CONFIG="${SIG_CFG_DIR}/sign.readonly_config" 22554ddf99SXuhui 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" 39*60bee396SXuhui LinLEGACY_RSA_PRI_KEY="legacy_keys/dev.key" 40*60bee396SXuhui LinLEGACY_RSA_PUB_KEY="legacy_keys/dev.pubkey" 41*60bee396SXuhui LinLEGACY_RSA_CRT_KEY="legacy_keys/dev.crt" 421e9dc3b8SJoseph ChenSIGNATURE_KEY_NODE="/signature/key-dev" 431e9dc3b8SJoseph ChenSPL_DTB="spl/u-boot-spl.dtb" 441e9dc3b8SJoseph ChenUBOOT_DTB="u-boot.dtb" 451e9dc3b8SJoseph Chen# its 461e9dc3b8SJoseph ChenITS_UBOOT="u-boot.its" 471e9dc3b8SJoseph ChenITS_BOOT="boot.its" 481e9dc3b8SJoseph ChenITS_RECOVERY="recovery.its" 491e9dc3b8SJoseph ChenARG_VER_UBOOT="0" 501e9dc3b8SJoseph ChenARG_VER_BOOT="0" 511e9dc3b8SJoseph ChenARG_VER_RECOVERY="0" 521e9dc3b8SJoseph Chen 531e9dc3b8SJoseph Chenfunction help() 541e9dc3b8SJoseph Chen{ 551e9dc3b8SJoseph Chen echo 561e9dc3b8SJoseph Chen echo "usage:" 571e9dc3b8SJoseph Chen echo " $0 [args]" 581e9dc3b8SJoseph Chen echo 591e9dc3b8SJoseph Chen echo "args:" 601e9dc3b8SJoseph Chen echo " --rollback-index-recovery <decimal integer>" 611e9dc3b8SJoseph Chen echo " --rollback-index-boot <decimal integer>" 621e9dc3b8SJoseph Chen echo " --rollback-index-uboot <decimal integer>" 631e9dc3b8SJoseph Chen echo " --version-recovery <decimal integer>" 641e9dc3b8SJoseph Chen echo " --version-boot <decimal integer>" 651e9dc3b8SJoseph Chen echo " --version-uboot <decimal integer>" 661e9dc3b8SJoseph Chen echo " --boot_img <boot image>" 671e9dc3b8SJoseph Chen echo " --recovery_img <recovery image>" 681e9dc3b8SJoseph Chen echo " --args <arg>" 691e9dc3b8SJoseph Chen echo " --ini-loader <loader ini file>" 701e9dc3b8SJoseph Chen echo " --ini-trust <trust ini file>" 711e9dc3b8SJoseph Chen echo " --no-check" 72cb458c93SXuhui Lin echo " --no-sign" 731e9dc3b8SJoseph Chen echo " --spl-new" 741e9dc3b8SJoseph Chen echo 751e9dc3b8SJoseph Chen} 761e9dc3b8SJoseph Chen 771e9dc3b8SJoseph Chenfunction arg_check_decimal() 781e9dc3b8SJoseph Chen{ 791e9dc3b8SJoseph Chen if [ -z $1 ]; then 801e9dc3b8SJoseph Chen help 811e9dc3b8SJoseph Chen exit 1 821e9dc3b8SJoseph Chen fi 831e9dc3b8SJoseph Chen 841e9dc3b8SJoseph Chen decimal=`echo $1 |sed 's/[0-9]//g'` 851e9dc3b8SJoseph Chen if [ ! -z ${decimal} ]; then 861e9dc3b8SJoseph Chen echo "ERROR: $1 is not decimal integer" 871e9dc3b8SJoseph Chen help 881e9dc3b8SJoseph Chen exit 1 891e9dc3b8SJoseph Chen fi 901e9dc3b8SJoseph Chen} 911e9dc3b8SJoseph Chen 921e9dc3b8SJoseph Chenfunction check_its() 931e9dc3b8SJoseph Chen{ 941e9dc3b8SJoseph Chen cat $1 | while read line 951e9dc3b8SJoseph Chen do 961e9dc3b8SJoseph Chen file=`echo ${line} | sed -n "/incbin/p" | awk -F '"' '{ printf $2 }' | tr -d ' '` 971e9dc3b8SJoseph Chen if [ ! -f ${file} ]; then 981e9dc3b8SJoseph Chen echo "ERROR: No ${file}" 991e9dc3b8SJoseph Chen exit 1 1001e9dc3b8SJoseph Chen fi 1011e9dc3b8SJoseph Chen done 1021e9dc3b8SJoseph Chen} 1031e9dc3b8SJoseph Chen 104ed912199SXuhui Linfunction check_rsa_algo() 105ed912199SXuhui Lin{ 106ed912199SXuhui Lin if grep -q '^CONFIG_FIT_ENABLE_RSA4096_SUPPORT=y' .config ; then 107ed912199SXuhui Lin rsa_algo="rsa4096" 108ed912199SXuhui Lin else 109ed912199SXuhui Lin rsa_algo="rsa2048" 110ed912199SXuhui Lin fi 111ed912199SXuhui Lin if ! grep -qr ${rsa_algo} $1 ; then 112ed912199SXuhui Lin echo "ERROR: Wrong rsa_algo in its file. It should be ${rsa_algo}." 113ed912199SXuhui Lin exit 1 114ed912199SXuhui Lin fi 115ed912199SXuhui Lin} 116ed912199SXuhui Lin 1171e9dc3b8SJoseph Chenfunction check_rsa_keys() 1181e9dc3b8SJoseph Chen{ 1191e9dc3b8SJoseph Chen if [ ! -f ${RSA_PRI_KEY} ]; then 1201e9dc3b8SJoseph Chen echo "ERROR: No ${RSA_PRI_KEY} " 1211e9dc3b8SJoseph Chen exit 1 1221e9dc3b8SJoseph Chen elif [ ! -f ${RSA_PUB_KEY} ]; then 1231e9dc3b8SJoseph Chen echo "ERROR: No ${RSA_PUB_KEY} " 1241e9dc3b8SJoseph Chen exit 1 1251e9dc3b8SJoseph Chen elif [ ! -f ${RSA_CRT_KEY} ]; then 1261e9dc3b8SJoseph Chen echo "ERROR: No ${RSA_CRT_KEY} " 1271e9dc3b8SJoseph Chen exit 1 1281e9dc3b8SJoseph Chen fi 1291e9dc3b8SJoseph Chen} 1301e9dc3b8SJoseph Chen 1311e9dc3b8SJoseph Chenfunction validate_arg() 1321e9dc3b8SJoseph Chen{ 1331e9dc3b8SJoseph Chen case $1 in 134cb458c93SXuhui Lin --no-check|--no-sign|--spl-new|--burn-key-hash) 1351e9dc3b8SJoseph Chen shift=1 1361e9dc3b8SJoseph Chen ;; 1371e9dc3b8SJoseph 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) 1381e9dc3b8SJoseph Chen shift=2 1391e9dc3b8SJoseph Chen ;; 1401e9dc3b8SJoseph Chen *) 1411e9dc3b8SJoseph Chen shift=0 1421e9dc3b8SJoseph Chen ;; 1431e9dc3b8SJoseph Chen esac 1441e9dc3b8SJoseph Chen echo ${shift} 1451e9dc3b8SJoseph Chen} 1461e9dc3b8SJoseph Chen 1471e9dc3b8SJoseph Chenfunction fit_process_args() 1481e9dc3b8SJoseph Chen{ 1491e9dc3b8SJoseph Chen if [ $# -eq 0 ]; then 1501e9dc3b8SJoseph Chen help 1511e9dc3b8SJoseph Chen exit 0 1521e9dc3b8SJoseph Chen fi 1531e9dc3b8SJoseph Chen 154cb458c93SXuhui Lin if grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then 155cb458c93SXuhui Lin ARG_SIGN="y" 156cb458c93SXuhui Lin fi 157cb458c93SXuhui Lin 1581e9dc3b8SJoseph Chen while [ $# -gt 0 ]; do 1591e9dc3b8SJoseph Chen case $1 in 1601e9dc3b8SJoseph Chen --args) 1611e9dc3b8SJoseph Chen ARG_VALIDATE=$2 1621e9dc3b8SJoseph Chen shift 2 1631e9dc3b8SJoseph Chen ;; 1641e9dc3b8SJoseph Chen --boot_img) # boot.img 1651e9dc3b8SJoseph Chen ARG_BOOT_IMG=$2 1661e9dc3b8SJoseph Chen shift 2 1671e9dc3b8SJoseph Chen ;; 1681e9dc3b8SJoseph Chen --chip) 1691e9dc3b8SJoseph Chen ARG_CHIP=$2 1701e9dc3b8SJoseph Chen shift 2 1711e9dc3b8SJoseph Chen ;; 1721e9dc3b8SJoseph Chen --recovery_img) # recovery.img 1731e9dc3b8SJoseph Chen ARG_RECOVERY_IMG=$2 1741e9dc3b8SJoseph Chen shift 2 1751e9dc3b8SJoseph Chen ;; 1761e9dc3b8SJoseph Chen --boot_img_dir) # boot.img components directory 1771e9dc3b8SJoseph Chen ARG_BOOT_IMG_DIR=$2 1781e9dc3b8SJoseph Chen shift 2 1791e9dc3b8SJoseph Chen ;; 1801e9dc3b8SJoseph Chen --no-check) # No hostcc fit signature check 1811e9dc3b8SJoseph Chen ARG_NO_CHECK="y" 1821e9dc3b8SJoseph Chen shift 1 1831e9dc3b8SJoseph Chen ;; 184cb458c93SXuhui Lin --no-sign) 185cb458c93SXuhui Lin ARG_NO_SIGN="y" 186cb458c93SXuhui Lin ARG_SIGN="n" 187cb458c93SXuhui Lin shift 1 188cb458c93SXuhui Lin ;; 1891e9dc3b8SJoseph Chen --ini-trust) # Assign trust ini file 1901e9dc3b8SJoseph Chen ARG_INI_TRUST=$2 1911e9dc3b8SJoseph Chen shift 2 1921e9dc3b8SJoseph Chen ;; 1931e9dc3b8SJoseph Chen --ini-loader) # Assign loader ini file 1941e9dc3b8SJoseph Chen ARG_INI_LOADER=$2 1951e9dc3b8SJoseph Chen shift 2 1961e9dc3b8SJoseph Chen ;; 1971e9dc3b8SJoseph Chen --spl-new) # Use current build u-boot-spl.bin to pack loader 1981e9dc3b8SJoseph Chen ARG_SPL_NEW="y" 19935e329a4SXuhui Lin # Whether aarch32 or not, spl only support 64 bits version. 20035e329a4SXuhui Lin if grep -q '^CONFIG_ARM64_BOOT_AARCH32=y' .config ; then 20135e329a4SXuhui Lin echo "ERROR: SPL doesn't support 32-bit. Please build 64-bit defconfig and update u-boot-spl.bin to rkbin first." 20235e329a4SXuhui Lin exit 1 20335e329a4SXuhui Lin fi 2041e9dc3b8SJoseph Chen shift 1 2051e9dc3b8SJoseph Chen ;; 2061e9dc3b8SJoseph Chen --rollback-index-boot) 2071e9dc3b8SJoseph Chen ARG_ROLLBACK_IDX_BOOT=$2 2081e9dc3b8SJoseph Chen arg_check_decimal $2 2091e9dc3b8SJoseph Chen shift 2 2101e9dc3b8SJoseph Chen ;; 2111e9dc3b8SJoseph Chen --rollback-index-recovery) 2121e9dc3b8SJoseph Chen ARG_ROLLBACK_IDX_RECOVERY=$2 2131e9dc3b8SJoseph Chen arg_check_decimal $2 2141e9dc3b8SJoseph Chen shift 2 2151e9dc3b8SJoseph Chen ;; 2161e9dc3b8SJoseph Chen --rollback-index-uboot) 2171e9dc3b8SJoseph Chen ARG_ROLLBACK_IDX_UBOOT=$2 2181e9dc3b8SJoseph Chen arg_check_decimal $2 2191e9dc3b8SJoseph Chen shift 2 2201e9dc3b8SJoseph Chen ;; 2211e9dc3b8SJoseph Chen --version-uboot) 2221e9dc3b8SJoseph Chen ARG_VER_UBOOT=$2 2231e9dc3b8SJoseph Chen arg_check_decimal $2 2241e9dc3b8SJoseph Chen shift 2 2251e9dc3b8SJoseph Chen ;; 2261e9dc3b8SJoseph Chen --version-boot) 2271e9dc3b8SJoseph Chen ARG_VER_BOOT=$2 2281e9dc3b8SJoseph Chen arg_check_decimal $2 2291e9dc3b8SJoseph Chen shift 2 2301e9dc3b8SJoseph Chen ;; 2311e9dc3b8SJoseph Chen --version-recovery) 2321e9dc3b8SJoseph Chen ARG_VER_RECOVERY=$2 2331e9dc3b8SJoseph Chen arg_check_decimal $2 2341e9dc3b8SJoseph Chen shift 2 2351e9dc3b8SJoseph Chen ;; 2361e9dc3b8SJoseph Chen --burn-key-hash) 2371e9dc3b8SJoseph Chen ARG_BURN_KEY_HASH="y" 2381e9dc3b8SJoseph Chen shift 1 2391e9dc3b8SJoseph Chen ;; 2406af0d055SJoseph Chen --spl-fwver) 2416af0d055SJoseph Chen ARG_FIT_FWVER="${ARG_FIT_FWVER} --spl-fwver $2" 2426af0d055SJoseph Chen shift 2 2436af0d055SJoseph Chen ;; 2446af0d055SJoseph Chen --fwver) 2456af0d055SJoseph Chen ARG_FIT_FWVER="${ARG_FIT_FWVER} --fwver $2" 2466af0d055SJoseph Chen shift 2 2476af0d055SJoseph Chen ;; 2481e9dc3b8SJoseph Chen *) 2491e9dc3b8SJoseph Chen help 2501e9dc3b8SJoseph Chen exit 1 2511e9dc3b8SJoseph Chen ;; 2521e9dc3b8SJoseph Chen esac 2531e9dc3b8SJoseph Chen done 2541e9dc3b8SJoseph Chen} 2551e9dc3b8SJoseph Chen 2561e9dc3b8SJoseph Chenfunction fit_raw_compile() 2571e9dc3b8SJoseph Chen{ 2581e9dc3b8SJoseph Chen # Verified-boot: should rebuild code but don't need to repack images. 2591e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" == "y" ]; then 2606af0d055SJoseph Chen ./make.sh --raw-compile ${ARG_FIT_FWVER} 2611e9dc3b8SJoseph Chen fi 262554ddf99SXuhui Lin rm ${FIT_DIR} -rf && mkdir -p ${FIT_DIR} && mkdir -p ${SIG_CFG_DIR} 2631e9dc3b8SJoseph Chen} 2641e9dc3b8SJoseph Chen 2651e9dc3b8SJoseph Chenfunction fit_gen_uboot_itb() 2661e9dc3b8SJoseph Chen{ 2671e9dc3b8SJoseph Chen # generate u-boot.its file 2681e9dc3b8SJoseph Chen ./make.sh itb ${ARG_INI_TRUST} 2691e9dc3b8SJoseph Chen 2701e9dc3b8SJoseph Chen # check existance of file in its 2711e9dc3b8SJoseph Chen check_its ${ITS_UBOOT} 2721e9dc3b8SJoseph Chen 2731e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 2741e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_UBOOT} -E -p ${OFFS_DATA} ${ITB_UBOOT} -v ${ARG_VER_UBOOT} 2751e9dc3b8SJoseph Chen if [ "${ARG_SPL_NEW}" == "y" ]; then 2761e9dc3b8SJoseph Chen ./make.sh --spl ${ARG_INI_LOADER} 2771e9dc3b8SJoseph Chen echo "pack loader with new: spl/u-boot-spl.bin" 2781e9dc3b8SJoseph Chen else 2791e9dc3b8SJoseph Chen ./make.sh loader ${ARG_INI_LOADER} 2801e9dc3b8SJoseph Chen fi 2811e9dc3b8SJoseph Chen else 2821e9dc3b8SJoseph Chen check_rsa_keys 2831e9dc3b8SJoseph Chen 2841e9dc3b8SJoseph Chen if ! grep -q '^CONFIG_SPL_FIT_SIGNATURE=y' .config ; then 2851e9dc3b8SJoseph Chen echo "ERROR: CONFIG_SPL_FIT_SIGNATURE is disabled" 2861e9dc3b8SJoseph Chen exit 1 2871e9dc3b8SJoseph Chen fi 2881e9dc3b8SJoseph Chen 2891e9dc3b8SJoseph Chen # rollback-index 2901e9dc3b8SJoseph Chen if grep -q '^CONFIG_SPL_FIT_ROLLBACK_PROTECT=y' .config ; then 2911e9dc3b8SJoseph Chen ARG_SPL_ROLLBACK_PROTECT="y" 2921e9dc3b8SJoseph Chen if [ -z ${ARG_ROLLBACK_IDX_UBOOT} ]; then 2931e9dc3b8SJoseph Chen echo "ERROR: No arg \"--rollback-index-uboot <n>\"" 2941e9dc3b8SJoseph Chen exit 1 2951e9dc3b8SJoseph Chen fi 2961e9dc3b8SJoseph Chen fi 2971e9dc3b8SJoseph Chen 2981e9dc3b8SJoseph Chen if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then 2991e9dc3b8SJoseph Chen VERSION=`grep 'rollback-index' ${ITS_UBOOT} | awk -F '=' '{ printf $2 }' | tr -d ' '` 3001e9dc3b8SJoseph Chen sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_UBOOT}>;/g" ${ITS_UBOOT} 3011e9dc3b8SJoseph Chen fi 3021e9dc3b8SJoseph Chen 3031e9dc3b8SJoseph Chen # Generally, boot.img is signed before uboot.img, so the ras key can be found 3041e9dc3b8SJoseph Chen # in u-boot.dtb. If not found, let's insert rsa key anyway. 3051e9dc3b8SJoseph Chen if ! fdtget -l ${UBOOT_DTB} /signature >/dev/null 2>&1 ; then 3061e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_UBOOT} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT} 3071e9dc3b8SJoseph Chen echo "## Adding RSA public key into ${UBOOT_DTB}" 3081e9dc3b8SJoseph Chen fi 3091e9dc3b8SJoseph Chen 3101e9dc3b8SJoseph Chen # Pack 3111e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_UBOOT} -k ${KEY_DIR} -K ${SPL_DTB} -E -p ${OFFS_DATA} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT} 3121e9dc3b8SJoseph Chen mv ${SIG_BIN} ${SIG_UBOOT} 3131e9dc3b8SJoseph Chen 3141e9dc3b8SJoseph Chen # burn-key-hash 3151e9dc3b8SJoseph Chen if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then 3161e9dc3b8SJoseph Chen if grep -q '^CONFIG_SPL_FIT_HW_CRYPTO=y' .config ; then 3171e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} burn-key-hash 0x1 3181e9dc3b8SJoseph Chen else 3191e9dc3b8SJoseph Chen echo "ERROR: --burn-key-hash requires CONFIG_SPL_FIT_HW_CRYPTO=y" 3201e9dc3b8SJoseph Chen exit 1 3211e9dc3b8SJoseph Chen fi 3221e9dc3b8SJoseph Chen fi 3231e9dc3b8SJoseph Chen 3241e9dc3b8SJoseph Chen # rollback-index read back check 3251e9dc3b8SJoseph Chen if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then 3261e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_UBOOT} /configurations/conf rollback-index` 3271e9dc3b8SJoseph Chen if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_UBOOT}" ]; then 3281e9dc3b8SJoseph Chen echo "ERROR: Failed to set rollback-index for ${ITB_UBOOT}"; 3291e9dc3b8SJoseph Chen exit 1 3301e9dc3b8SJoseph Chen fi 3311e9dc3b8SJoseph Chen fi 3321e9dc3b8SJoseph Chen 3331e9dc3b8SJoseph Chen # burn-key-hash read back check 3341e9dc3b8SJoseph Chen if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then 3351e9dc3b8SJoseph Chen if [ "`fdtget -ti ${SPL_DTB} ${SIGNATURE_KEY_NODE} burn-key-hash`" != "1" ]; then 3361e9dc3b8SJoseph Chen echo "ERROR: Failed to set burn-key-hash for ${SPL_DTB}"; 3371e9dc3b8SJoseph Chen exit 1 3381e9dc3b8SJoseph Chen fi 3391e9dc3b8SJoseph Chen fi 3401e9dc3b8SJoseph Chen 3411e9dc3b8SJoseph Chen # host check signature 3421e9dc3b8SJoseph Chen if [ "${ARG_NO_CHECK}" != "y" ]; then 3431e9dc3b8SJoseph Chen if [ "${ARG_SPL_NEW}" == "y" ]; then 3441e9dc3b8SJoseph Chen ${CHECK_SIGN} -f ${ITB_UBOOT} -k ${SPL_DTB} -s 3451e9dc3b8SJoseph Chen else 3461e9dc3b8SJoseph Chen spl_file="../rkbin/"`sed -n "/FlashBoot=/s/FlashBoot=//p" ${ARG_INI_LOADER} |tr -d '\r'` 3471e9dc3b8SJoseph Chen offs=`fdtdump -s ${spl_file} | head -1 | awk -F ":" '{ print $2 }' | sed "s/ found fdt at offset //g" | tr -d " "` 3481e9dc3b8SJoseph Chen if [ -z ${offs} ]; then 3491e9dc3b8SJoseph Chen echo "ERROR: invalid ${spl_file} , unable to find fdt blob" 3501e9dc3b8SJoseph Chen fi 3511e9dc3b8SJoseph Chen offs=`printf %d ${offs} ` # hex -> dec 3521e9dc3b8SJoseph Chen dd if=${spl_file} of=spl/u-boot-spl-old.dtb bs=${offs} skip=1 >/dev/null 2>&1 3531e9dc3b8SJoseph Chen ${CHECK_SIGN} -f ${ITB_UBOOT} -k spl/u-boot-spl-old.dtb -s 3541e9dc3b8SJoseph Chen fi 3551e9dc3b8SJoseph Chen fi 3561e9dc3b8SJoseph Chen 3571e9dc3b8SJoseph Chen # minimize u-boot-spl.dtb: clear as 0 but not remove property. 3581e9dc3b8SJoseph Chen if grep -q '^CONFIG_SPL_FIT_HW_CRYPTO=y' .config ; then 3591e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0 3601e9dc3b8SJoseph Chen if grep -q '^CONFIG_SPL_ROCKCHIP_CRYPTO_V1=y' .config ; then 3611e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 3621e9dc3b8SJoseph Chen fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@np 3631e9dc3b8SJoseph Chen else 3641e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 3651e9dc3b8SJoseph Chen fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@c 3661e9dc3b8SJoseph Chen fi 3671e9dc3b8SJoseph Chen else 3681e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 3691e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 3701e9dc3b8SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0 3711e9dc3b8SJoseph Chen fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@c 3721e9dc3b8SJoseph Chen fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@np 3731e9dc3b8SJoseph Chen fi 3741e9dc3b8SJoseph Chen 3751e9dc3b8SJoseph Chen # repack spl 3761e9dc3b8SJoseph Chen if [ "${ARG_SPL_NEW}" == "y" ]; then 3771e9dc3b8SJoseph Chen cat spl/u-boot-spl-nodtb.bin > spl/u-boot-spl.bin 3781e9dc3b8SJoseph Chen if ! grep -q '^CONFIG_SPL_SEPARATE_BSS=y' .config ; then 3791e9dc3b8SJoseph Chen cat spl/u-boot-spl-pad.bin >> spl/u-boot-spl.bin 3801e9dc3b8SJoseph Chen fi 3811e9dc3b8SJoseph Chen cat ${SPL_DTB} >> spl/u-boot-spl.bin 3821e9dc3b8SJoseph Chen 3831e9dc3b8SJoseph Chen ./make.sh --spl ${ARG_INI_LOADER} 3841e9dc3b8SJoseph Chen echo "## pack loader with new: spl/u-boot-spl.bin" 3851e9dc3b8SJoseph Chen else 3861e9dc3b8SJoseph Chen ./make.sh loader ${ARG_INI_LOADER} 3871e9dc3b8SJoseph Chen fi 3881e9dc3b8SJoseph Chen 3891e9dc3b8SJoseph Chen if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then 3901e9dc3b8SJoseph Chen echo "## ${SPL_DTB}: burn-key-hash=1" 3911e9dc3b8SJoseph Chen fi 3921e9dc3b8SJoseph Chen fi 3931e9dc3b8SJoseph Chen 3941e9dc3b8SJoseph Chen rm -f u-boot.itb u-boot.img u-boot-dtb.img 3951e9dc3b8SJoseph Chen mv ${ITS_UBOOT} ${FIT_DIR} 3961e9dc3b8SJoseph Chen} 3971e9dc3b8SJoseph Chen 3981e9dc3b8SJoseph Chenfunction fit_gen_boot_itb() 3991e9dc3b8SJoseph Chen{ 4001e9dc3b8SJoseph Chen if [ ! -z ${ARG_BOOT_IMG} ]; then 4011e9dc3b8SJoseph Chen ${FIT_UNPACK} -f ${ARG_BOOT_IMG} -o ${FIT_DIR}/unpack 4021e9dc3b8SJoseph Chen ITS_BOOT="${FIT_DIR}/unpack/image.its" 4031e9dc3b8SJoseph Chen else 4041e9dc3b8SJoseph Chen compression=`awk -F"," '/COMPRESSION=/ { printf $1 }' ${ARG_INI_TRUST} | tr -d ' ' | cut -c 13-` 4051e9dc3b8SJoseph Chen if [ -z "${compression}" ]; then 4061e9dc3b8SJoseph Chen compression="none" 4071e9dc3b8SJoseph Chen fi 4081e9dc3b8SJoseph Chen ./arch/arm/mach-rockchip/make_fit_boot.sh -c ${compression} > ${ITS_BOOT} 4091e9dc3b8SJoseph Chen check_its ${ITS_BOOT} 4101e9dc3b8SJoseph Chen fi 4111e9dc3b8SJoseph Chen 4121e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 4131e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_BOOT} -E -p ${OFFS_DATA} ${ITB_BOOT} -v ${ARG_VER_BOOT} 4141e9dc3b8SJoseph Chen else 4151e9dc3b8SJoseph Chen check_rsa_keys 4161e9dc3b8SJoseph Chen 417ed912199SXuhui Lin check_rsa_algo ${ITS_BOOT} 418ed912199SXuhui Lin 419cb458c93SXuhui Lin if [ "${ARG_SIGN}" != "y" ]; then 4201e9dc3b8SJoseph Chen echo "ERROR: CONFIG_FIT_SIGNATURE is disabled" 4211e9dc3b8SJoseph Chen exit 1 4221e9dc3b8SJoseph Chen fi 4231e9dc3b8SJoseph Chen 4241e9dc3b8SJoseph Chen if grep -q '^CONFIG_FIT_ROLLBACK_PROTECT=y' .config ; then 4251e9dc3b8SJoseph Chen ARG_ROLLBACK_PROTECT="y" 4261e9dc3b8SJoseph Chen if [ -z ${ARG_ROLLBACK_IDX_BOOT} ]; then 4271e9dc3b8SJoseph Chen echo "ERROR: No arg \"--rollback-index-boot <n>\"" 4281e9dc3b8SJoseph Chen exit 1 4291e9dc3b8SJoseph Chen fi 4301ebfa2d7SJoseph Chen if ! grep -q '^CONFIG_OPTEE_CLIENT=y' .config ; then 4311ebfa2d7SJoseph Chen echo "ERROR: Don't support \"--rollback-index-boot <n>\"" 4321ebfa2d7SJoseph Chen exit 1 4331ebfa2d7SJoseph Chen fi 4341e9dc3b8SJoseph Chen fi 4351e9dc3b8SJoseph Chen 4361e9dc3b8SJoseph Chen # fixup 437d1627df0SJoseph Chen FDT_ADDR_R=`strings env/built-in.o | grep 'fdt_addr_r=' | awk -F "=" '{ print $2 }'` 438d1627df0SJoseph Chen KERNEL_ADDR_R=`strings env/built-in.o | grep 'kernel_addr_r=' | awk -F "=" '{ print $2 }'` 439d1627df0SJoseph Chen RMADISK_ADDR_R=`strings env/built-in.o | grep 'ramdisk_addr_r=' | awk -F "=" '{ print $2 }'` 440a08b0b01SJoseph Chen sed -i "s/${FDT_ADDR_PLACEHOLDER}/${FDT_ADDR_R}/g" ${ITS_BOOT} 4411e9dc3b8SJoseph Chen sed -i "s/${KERNEL_ADDR_PLACEHOLDER}/${KERNEL_ADDR_R}/g" ${ITS_BOOT} 4421e9dc3b8SJoseph Chen sed -i "s/${RAMDISK_ADDR_PLACEHOLDER}/${RMADISK_ADDR_R}/g" ${ITS_BOOT} 4431e9dc3b8SJoseph Chen 4441e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 4451e9dc3b8SJoseph Chen VERSION=`grep 'rollback-index' ${ITS_BOOT} | awk -F '=' '{ printf $2 }' | tr -d ' '` 4461e9dc3b8SJoseph Chen sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_BOOT}>;/g" ${ITS_BOOT} 4471e9dc3b8SJoseph Chen fi 4481e9dc3b8SJoseph Chen 4491e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_BOOT} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_BOOT} -v ${ARG_VER_BOOT} 4501e9dc3b8SJoseph Chen mv ${SIG_BIN} ${SIG_BOOT} 4511e9dc3b8SJoseph Chen 4521e9dc3b8SJoseph Chen # rollback-index read back check 4531e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 4541e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_BOOT} /configurations/conf rollback-index` 4551e9dc3b8SJoseph Chen if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_BOOT}" ]; then 4561e9dc3b8SJoseph Chen echo "ERROR: Failed to set rollback-index for ${ITB_BOOT}"; 4571e9dc3b8SJoseph Chen exit 1 4581e9dc3b8SJoseph Chen fi 4591e9dc3b8SJoseph Chen fi 4601e9dc3b8SJoseph Chen 4611e9dc3b8SJoseph Chen # host check signature 4621e9dc3b8SJoseph Chen if [ "${ARG_NO_CHECK}" != "y" ]; then 4631e9dc3b8SJoseph Chen ${CHECK_SIGN} -f ${ITB_BOOT} -k ${UBOOT_DTB} 4641e9dc3b8SJoseph Chen fi 4651e9dc3b8SJoseph Chen 4661e9dc3b8SJoseph Chen # minimize u-boot.dtb: clearn as 0 but not remove property. 4671e9dc3b8SJoseph Chen if grep -q '^CONFIG_FIT_HW_CRYPTO=y' .config ; then 4681e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0 4691e9dc3b8SJoseph Chen if grep -q '^CONFIG_ROCKCHIP_CRYPTO_V1=y' .config ; then 4701e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 4711e9dc3b8SJoseph Chen else 4721e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 4731e9dc3b8SJoseph Chen fi 4741e9dc3b8SJoseph Chen else 4751e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 4761e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 4771e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0 4781e9dc3b8SJoseph Chen fi 4791e9dc3b8SJoseph Chen fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@c 4801e9dc3b8SJoseph Chen fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@np 4811e9dc3b8SJoseph Chen fi 4821e9dc3b8SJoseph Chen 4831e9dc3b8SJoseph Chen mv ${ITS_BOOT} ${FIT_DIR} 4841e9dc3b8SJoseph Chen} 4851e9dc3b8SJoseph Chen 4861e9dc3b8SJoseph Chenfunction fit_gen_recovery_itb() 4871e9dc3b8SJoseph Chen{ 4881e9dc3b8SJoseph Chen if [ ! -z ${ARG_RECOVERY_IMG} ]; then 4891e9dc3b8SJoseph Chen ${FIT_UNPACK} -f ${ARG_RECOVERY_IMG} -o ${FIT_DIR}/unpack 4901e9dc3b8SJoseph Chen ITS_RECOVERY="${FIT_DIR}/unpack/image.its" 4911e9dc3b8SJoseph Chen else 4921e9dc3b8SJoseph Chen echo "ERROR: No recovery.img" 4931e9dc3b8SJoseph Chen exit 1 4941e9dc3b8SJoseph Chen fi 4951e9dc3b8SJoseph Chen 4961e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 4971e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_RECOVERY} -E -p ${OFFS_DATA} ${ITB_RECOVERY} -v ${ARG_VER_RECOVERY} 4981e9dc3b8SJoseph Chen else 4991e9dc3b8SJoseph Chen check_rsa_keys 5001e9dc3b8SJoseph Chen 501ed912199SXuhui Lin check_rsa_algo ${ITS_RECOVERY} 502ed912199SXuhui Lin 503cb458c93SXuhui Lin if [ "${ARG_SIGN}" != "y" ]; then 5041e9dc3b8SJoseph Chen echo "ERROR: CONFIG_FIT_SIGNATURE is disabled" 5051e9dc3b8SJoseph Chen exit 1 5061e9dc3b8SJoseph Chen fi 5071e9dc3b8SJoseph Chen 5081e9dc3b8SJoseph Chen if grep -q '^CONFIG_FIT_ROLLBACK_PROTECT=y' .config ; then 5091e9dc3b8SJoseph Chen ARG_ROLLBACK_PROTECT="y" 5101e9dc3b8SJoseph Chen if [ -z ${ARG_ROLLBACK_IDX_RECOVERY} ]; then 5111e9dc3b8SJoseph Chen echo "ERROR: No arg \"--rollback-index-recovery <n>\"" 5121e9dc3b8SJoseph Chen exit 1 5131e9dc3b8SJoseph Chen fi 5141ebfa2d7SJoseph Chen if ! grep -q '^CONFIG_OPTEE_CLIENT=y' .config ; then 5151ebfa2d7SJoseph Chen echo "ERROR: Don't support \"--rollback-index-recovery <n>\"" 5161ebfa2d7SJoseph Chen exit 1 5171ebfa2d7SJoseph Chen fi 5181e9dc3b8SJoseph Chen fi 5191e9dc3b8SJoseph Chen 5201e9dc3b8SJoseph Chen # fixup 521d1627df0SJoseph Chen FDT_ADDR_R=`strings env/built-in.o | grep 'fdt_addr_r=' | awk -F "=" '{ print $2 }'` 522d1627df0SJoseph Chen KERNEL_ADDR_R=`strings env/built-in.o | grep 'kernel_addr_r=' | awk -F "=" '{ print $2 }'` 523d1627df0SJoseph Chen RMADISK_ADDR_R=`strings env/built-in.o | grep 'ramdisk_addr_r=' | awk -F "=" '{ print $2 }'` 5241e9dc3b8SJoseph Chen sed -i "s/${FDT_ADDR_PLACEHOLDER}/${FDT_ADDR_R}/g" ${ITS_RECOVERY} 5251e9dc3b8SJoseph Chen sed -i "s/${KERNEL_ADDR_PLACEHOLDER}/${KERNEL_ADDR_R}/g" ${ITS_RECOVERY} 5261e9dc3b8SJoseph Chen sed -i "s/${RAMDISK_ADDR_PLACEHOLDER}/${RMADISK_ADDR_R}/g" ${ITS_RECOVERY} 5271e9dc3b8SJoseph Chen 5281e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 5291e9dc3b8SJoseph Chen VERSION=`grep 'rollback-index' ${ITS_RECOVERY} | awk -F '=' '{ printf $2 }' | tr -d ' '` 5301e9dc3b8SJoseph Chen sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_RECOVERY}>;/g" ${ITS_RECOVERY} 5311e9dc3b8SJoseph Chen fi 5321e9dc3b8SJoseph Chen 5331e9dc3b8SJoseph Chen ${MKIMAGE} -f ${ITS_RECOVERY} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_RECOVERY} -v ${ARG_VER_RECOVERY} 5341e9dc3b8SJoseph Chen mv ${SIG_BIN} ${SIG_RECOVERY} 5351e9dc3b8SJoseph Chen 5361e9dc3b8SJoseph Chen # rollback-index read back check 5371e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 5381e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_RECOVERY} /configurations/conf rollback-index` 5391e9dc3b8SJoseph Chen if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_RECOVERY}" ]; then 5401e9dc3b8SJoseph Chen echo "ERROR: Failed to set rollback-index for ${ITB_RECOVERY}"; 5411e9dc3b8SJoseph Chen exit 1 5421e9dc3b8SJoseph Chen fi 5431e9dc3b8SJoseph Chen fi 5441e9dc3b8SJoseph Chen 5451e9dc3b8SJoseph Chen # host check signature 5461e9dc3b8SJoseph Chen if [ "${ARG_NO_CHECK}" != "y" ]; then 5471e9dc3b8SJoseph Chen ${CHECK_SIGN} -f ${ITB_RECOVERY} -k ${UBOOT_DTB} 5481e9dc3b8SJoseph Chen fi 5491e9dc3b8SJoseph Chen 5501e9dc3b8SJoseph Chen # minimize u-boot.dtb: clearn as 0 but not remove property. 5511e9dc3b8SJoseph Chen if grep -q '^CONFIG_FIT_HW_CRYPTO=y' .config ; then 5521e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0 5531e9dc3b8SJoseph Chen if grep -q '^CONFIG_ROCKCHIP_CRYPTO_V1=y' .config ; then 5541e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 5551e9dc3b8SJoseph Chen else 5561e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 5571e9dc3b8SJoseph Chen fi 5581e9dc3b8SJoseph Chen else 5591e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 5601e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 5611e9dc3b8SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0 5621e9dc3b8SJoseph Chen fi 5631e9dc3b8SJoseph Chen fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@c 5641e9dc3b8SJoseph Chen fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@np 5651e9dc3b8SJoseph Chen fi 5661e9dc3b8SJoseph Chen 5671e9dc3b8SJoseph Chen mv ${ITS_RECOVERY} ${FIT_DIR} 5681e9dc3b8SJoseph Chen} 5691e9dc3b8SJoseph Chen 5701e9dc3b8SJoseph Chenfunction fit_gen_uboot_img() 5711e9dc3b8SJoseph Chen{ 5721e9dc3b8SJoseph Chen ITB=$1 5731e9dc3b8SJoseph Chen 5741e9dc3b8SJoseph Chen if [ -z ${ITB} ]; then 5751e9dc3b8SJoseph Chen ITB=${ITB_UBOOT} 5761e9dc3b8SJoseph Chen fi 5771e9dc3b8SJoseph Chen 5781e9dc3b8SJoseph Chen ITB_MAX_NUM=`sed -n "/SPL_FIT_IMAGE_MULTIPLE/p" .config | awk -F "=" '{ print $2 }'` 5791e9dc3b8SJoseph Chen ITB_MAX_KB=`sed -n "/SPL_FIT_IMAGE_KB/p" .config | awk -F "=" '{ print $2 }'` 5801e9dc3b8SJoseph Chen ITB_MAX_BS=$((ITB_MAX_KB*1024)) 5811e9dc3b8SJoseph Chen ITB_BS=`ls -l ${ITB} | awk '{ print $5 }'` 5821e9dc3b8SJoseph Chen 5831e9dc3b8SJoseph Chen if [ ${ITB_BS} -gt ${ITB_MAX_BS} ]; then 5841e9dc3b8SJoseph Chen echo "ERROR: pack ${IMG_UBOOT} failed! ${ITB} actual: ${ITB_BS} bytes, max limit: ${ITB_MAX_BS} bytes" 5851e9dc3b8SJoseph Chen exit 1 5861e9dc3b8SJoseph Chen fi 5871e9dc3b8SJoseph Chen 5881e9dc3b8SJoseph Chen rm -f ${IMG_UBOOT} 5891e9dc3b8SJoseph Chen for ((i = 0; i < ${ITB_MAX_NUM}; i++)); 5901e9dc3b8SJoseph Chen do 5911e9dc3b8SJoseph Chen cat ${ITB} >> ${IMG_UBOOT} 5921e9dc3b8SJoseph Chen truncate -s %${ITB_MAX_KB}K ${IMG_UBOOT} 5931e9dc3b8SJoseph Chen done 5941e9dc3b8SJoseph Chen} 5951e9dc3b8SJoseph Chen 5961e9dc3b8SJoseph Chenfunction fit_gen_boot_img() 5971e9dc3b8SJoseph Chen{ 5981e9dc3b8SJoseph Chen ITB=$1 5991e9dc3b8SJoseph Chen 6001e9dc3b8SJoseph Chen if [ -z ${ITB} ]; then 6011e9dc3b8SJoseph Chen ITB=${ITB_BOOT} 6021e9dc3b8SJoseph Chen fi 6031e9dc3b8SJoseph Chen 6041e9dc3b8SJoseph Chen if [ "${ITB}" != "${IMG_BOOT}" ]; then 6051e9dc3b8SJoseph Chen cp ${ITB} ${IMG_BOOT} -f 6061e9dc3b8SJoseph Chen fi 6071e9dc3b8SJoseph Chen} 6081e9dc3b8SJoseph Chen 6091e9dc3b8SJoseph Chenfunction fit_gen_recovery_img() 6101e9dc3b8SJoseph Chen{ 6111e9dc3b8SJoseph Chen ITB=$1 6121e9dc3b8SJoseph Chen 6131e9dc3b8SJoseph Chen if [ -z ${ITB} ]; then 6141e9dc3b8SJoseph Chen ITB=${ITB_RECOVERY} 6151e9dc3b8SJoseph Chen fi 6161e9dc3b8SJoseph Chen 6171e9dc3b8SJoseph Chen if [ "${ITB}" != "${IMG_RECOVERY}" ]; then 6181e9dc3b8SJoseph Chen cp ${ITB} ${IMG_RECOVERY} -f 6191e9dc3b8SJoseph Chen fi 6201e9dc3b8SJoseph Chen} 6211e9dc3b8SJoseph Chen 6221e9dc3b8SJoseph Chenfunction fit_gen_loader() 6231e9dc3b8SJoseph Chen{ 624cb458c93SXuhui Lin if [ "${ARG_SIGN}" == "y" ]; then 6251e9dc3b8SJoseph Chen ${RK_SIGN_TOOL} cc --chip ${ARG_CHIP: 2: 6} 626*60bee396SXuhui Lin if grep -q '^CONFIG_SPL_REVOKE_PUB_KEY=y' .config ; then 627*60bee396SXuhui Lin ${RK_SIGN_TOOL} lk --key ${LEGACY_RSA_PRI_KEY} --pubkey ${LEGACY_RSA_PUB_KEY} 628*60bee396SXuhui Lin ${RK_SIGN_TOOL} ss --flag=0x80 629*60bee396SXuhui Lin else 6301e9dc3b8SJoseph Chen ${RK_SIGN_TOOL} lk --key ${RSA_PRI_KEY} --pubkey ${RSA_PUB_KEY} 631*60bee396SXuhui Lin fi 6321e9dc3b8SJoseph Chen if ls *loader*.bin >/dev/null 2>&1 ; then 6331e9dc3b8SJoseph Chen ${RK_SIGN_TOOL} sl --loader *loader*.bin 6341e9dc3b8SJoseph Chen fi 6351e9dc3b8SJoseph Chen if ls *download*.bin >/dev/null 2>&1 ; then 6361e9dc3b8SJoseph Chen ${RK_SIGN_TOOL} sl --loader *download*.bin 6371e9dc3b8SJoseph Chen fi 6381e9dc3b8SJoseph Chen if ls *idblock*.img >/dev/null 2>&1 ; then 6391e9dc3b8SJoseph Chen ${RK_SIGN_TOOL} sb --idb *idblock*.img 6401e9dc3b8SJoseph Chen fi 6411e9dc3b8SJoseph Chen fi 6421e9dc3b8SJoseph Chen} 6431e9dc3b8SJoseph Chen 6441e9dc3b8SJoseph Chenfunction fit_msg_uboot() 6451e9dc3b8SJoseph Chen{ 6461e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 6471e9dc3b8SJoseph Chen MSG_SIGN="no-signed" 6481e9dc3b8SJoseph Chen else 6491e9dc3b8SJoseph Chen MSG_SIGN="signed" 6501e9dc3b8SJoseph Chen fi 6511e9dc3b8SJoseph Chen 6521e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_UBOOT} / version` 6531e9dc3b8SJoseph Chen if [ "${VERSION}" != "" ]; then 6541e9dc3b8SJoseph Chen MSG_VER=", version=${VERSION}" 6551e9dc3b8SJoseph Chen fi 6561e9dc3b8SJoseph Chen 6571e9dc3b8SJoseph Chen if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then 6581e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_UBOOT}): ${IMG_UBOOT} (with uboot, trust...) is ready" 6591e9dc3b8SJoseph Chen else 6601e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_UBOOT} (FIT with uboot, trust...) is ready" 6611e9dc3b8SJoseph Chen fi 6621e9dc3b8SJoseph Chen} 6631e9dc3b8SJoseph Chen 6641e9dc3b8SJoseph Chenfunction fit_msg_boot() 6651e9dc3b8SJoseph Chen{ 6661e9dc3b8SJoseph Chen if [ -z "${ARG_BOOT_IMG}" ]; then 6671e9dc3b8SJoseph Chen return; 6681e9dc3b8SJoseph Chen fi 6691e9dc3b8SJoseph Chen 6701e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 6711e9dc3b8SJoseph Chen MSG_SIGN="no-signed" 6721e9dc3b8SJoseph Chen else 6731e9dc3b8SJoseph Chen MSG_SIGN="signed" 6741e9dc3b8SJoseph Chen fi 6751e9dc3b8SJoseph Chen 6761e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_BOOT} / version` 6771e9dc3b8SJoseph Chen if [ "${VERSION}" != "" ]; then 6781e9dc3b8SJoseph Chen MSG_VER=", version=${VERSION}" 6791e9dc3b8SJoseph Chen fi 6801e9dc3b8SJoseph Chen 6811e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 6821e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_BOOT}): ${IMG_BOOT} is ready" 6831e9dc3b8SJoseph Chen else 6841e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_BOOT} (FIT with kernel, fdt, resource...) is ready" 6851e9dc3b8SJoseph Chen fi 6861e9dc3b8SJoseph Chen} 6871e9dc3b8SJoseph Chen 6881e9dc3b8SJoseph Chenfunction fit_msg_recovery() 6891e9dc3b8SJoseph Chen{ 6901e9dc3b8SJoseph Chen if [ -z "${ARG_RECOVERY_IMG}" ]; then 6911e9dc3b8SJoseph Chen return; 6921e9dc3b8SJoseph Chen fi 6931e9dc3b8SJoseph Chen 6941e9dc3b8SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 6951e9dc3b8SJoseph Chen MSG_SIGN="no-signed" 6961e9dc3b8SJoseph Chen else 6971e9dc3b8SJoseph Chen MSG_SIGN="signed" 6981e9dc3b8SJoseph Chen fi 6991e9dc3b8SJoseph Chen 7001e9dc3b8SJoseph Chen VERSION=`fdtget -ti ${ITB_RECOVERY} / version` 7011e9dc3b8SJoseph Chen if [ "${VERSION}" != "" ]; then 7021e9dc3b8SJoseph Chen MSG_VER=", version=${VERSION}" 7031e9dc3b8SJoseph Chen fi 7041e9dc3b8SJoseph Chen 7051e9dc3b8SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 7061e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_RECOVERY}): ${IMG_RECOVERY} is ready" 7071e9dc3b8SJoseph Chen else 7081e9dc3b8SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_RECOVERY} (FIT with kernel, fdt, resource...) is ready" 7091e9dc3b8SJoseph Chen fi 7101e9dc3b8SJoseph Chen} 7111e9dc3b8SJoseph Chen 7121e9dc3b8SJoseph Chenfunction fit_msg_loader() 7131e9dc3b8SJoseph Chen{ 7141e9dc3b8SJoseph Chen if ls *loader*.bin >/dev/null 2>&1 ; then 7151e9dc3b8SJoseph Chen LOADER=`ls *loader*.bin` 7161e9dc3b8SJoseph Chen fi 7171e9dc3b8SJoseph Chen 7181e9dc3b8SJoseph Chen if ls *idblock*.img >/dev/null 2>&1 ; then 7191e9dc3b8SJoseph Chen LOADER=`ls *idblock*.img` 7201e9dc3b8SJoseph Chen fi 7211e9dc3b8SJoseph Chen 722cb458c93SXuhui Lin if [ "${ARG_SIGN}" == "y" ]; then 7231e9dc3b8SJoseph Chen echo "Image(signed): ${LOADER} (with spl, ddr...) is ready" 7241e9dc3b8SJoseph Chen else 7251e9dc3b8SJoseph Chen echo "Image(no-signed): ${LOADER} (with spl, ddr...) is ready" 7261e9dc3b8SJoseph Chen fi 7271e9dc3b8SJoseph Chen} 7281e9dc3b8SJoseph Chen 7291e9dc3b8SJoseph Chenfunction fit_msg_u_boot_loader() 7301e9dc3b8SJoseph Chen{ 7311e9dc3b8SJoseph Chen if ls *loader*.bin >/dev/null 2>&1 ; then 7321e9dc3b8SJoseph Chen LOADER=`ls *loader*.bin` 7331e9dc3b8SJoseph Chen fi 7341e9dc3b8SJoseph Chen 7351e9dc3b8SJoseph Chen if ls *idblock*.img >/dev/null 2>&1 ; then 7361e9dc3b8SJoseph Chen LOADER=`ls *idblock*.img` 7371e9dc3b8SJoseph Chen fi 7381e9dc3b8SJoseph Chen 739cb458c93SXuhui Lin if [ "${ARG_SIGN}" == "y" ]; then 7401e9dc3b8SJoseph Chen echo "Image(signed): ${LOADER} (with u-boot, ddr...) is ready" 7411e9dc3b8SJoseph Chen else 7421e9dc3b8SJoseph Chen echo "Image(no-signed): ${LOADER} (with u-boot, ddr...) is ready" 7431e9dc3b8SJoseph Chen fi 7441e9dc3b8SJoseph Chen} 745554ddf99SXuhui Lin 746554ddf99SXuhui Linfunction fit_signcfg_export() 747554ddf99SXuhui Lin{ 748554ddf99SXuhui Lin if [ "${ARG_NO_SIGN}" == "y" ]; then 749554ddf99SXuhui Lin if ls *loader*.bin >/dev/null 2>&1 ; then 750554ddf99SXuhui Lin LOADER=`ls *loader*.bin` 751554ddf99SXuhui Lin elif ls *download*.bin >/dev/null 2>&1 ; then 752554ddf99SXuhui Lin LOADER=`ls *download*.bin` 753554ddf99SXuhui Lin else 754554ddf99SXuhui Lin echo "ERROR: No loader found" 755554ddf99SXuhui Lin exit 1 756554ddf99SXuhui Lin fi 757554ddf99SXuhui Lin cp ${ARG_INI_LOADER} ${MINIALL_INI} 758554ddf99SXuhui Lin cp .config ${SIG_CONFIG} 759554ddf99SXuhui Lin 760554ddf99SXuhui Lin mkdir -p ${SIG_CFG_DIR}/test_images/ 761554ddf99SXuhui Lin cp uboot.img ${SIG_CFG_DIR}/test_images/ 762554ddf99SXuhui Lin cp ${LOADER} ${SIG_CFG_DIR}/test_images/ 763554ddf99SXuhui Lin tar zcvf ${SIG_CFG_DIR}/test_images.tar.gz ${SIG_CFG_DIR}/test_images >/dev/null 2>&1 764554ddf99SXuhui Lin rm -rf ${SIG_CFG_DIR}/test_images/ 765554ddf99SXuhui Lin 766554ddf99SXuhui Lin FDT_ADDR_R=`strings env/built-in.o | grep 'fdt_addr_r=' | awk -F "=" '{ print $2 }'` 767554ddf99SXuhui Lin KERNEL_ADDR_R=`strings env/built-in.o | grep 'kernel_addr_r=' | awk -F "=" '{ print $2 }'` 768554ddf99SXuhui Lin RMADISK_ADDR_R=`strings env/built-in.o | grep 'ramdisk_addr_r=' | awk -F "=" '{ print $2 }'` 769554ddf99SXuhui Lin echo "fdt_addr_r=${FDT_ADDR_R}" >> ${SIG_CONFIG} 770554ddf99SXuhui Lin echo "kernel_addr_r=${KERNEL_ADDR_R}" >> ${SIG_CONFIG} 771554ddf99SXuhui Lin echo "ramdisk_addr_r=${RMADISK_ADDR_R}" >> ${SIG_CONFIG} 772554ddf99SXuhui Lin 773554ddf99SXuhui Lin CSUM=`sha256sum u-boot-nodtb.bin | awk '{ print $1 }'` 774554ddf99SXuhui Lin echo "uboot_sha256sum=${CSUM}" >> ${SIG_CONFIG} 775554ddf99SXuhui Lin CSUM=`sha256sum spl/u-boot-spl-nodtb.bin | awk '{ print $1 }'` 776554ddf99SXuhui Lin echo "spl_sha256sum=${CSUM}" >> ${SIG_CONFIG} 777554ddf99SXuhui Lin SIZE=`ls -l spl/u-boot-spl-nodtb.bin | awk '{ print $5 }'` 778554ddf99SXuhui Lin echo "spl_size=${SIZE}" >> ${SIG_CONFIG} 779554ddf99SXuhui Lin 780554ddf99SXuhui Lin BUILD_MAIL=`git config --get user.email` 781554ddf99SXuhui Lin BUILD_HOST=`hostname` 782554ddf99SXuhui Lin BUILD_USER=${USER} 783554ddf99SXuhui Lin BUILD_DATE=`date` 784554ddf99SXuhui Lin echo "BUILD: ${BUILD_MAIL} # ${BUILD_USER}@${BUILD_HOST} # ${BUILD_DATE}" >> ${SIG_CONFIG} 785554ddf99SXuhui Lin fi 786554ddf99SXuhui Lin} 787