1ae33e311SJoseph Chen#!/bin/bash 2ae33e311SJoseph Chen# 3ae33e311SJoseph Chen# Copyright (c) 2020 Fuzhou Rockchip Electronics Co., Ltd 4ae33e311SJoseph Chen# 5ae33e311SJoseph Chen# SPDX-License-Identifier: GPL-2.0 6ae33e311SJoseph Chen# 7ae33e311SJoseph Chenset -e 8ae33e311SJoseph Chen 9ae33e311SJoseph ChenFIT_DIR="fit" 10ae33e311SJoseph ChenIMG_UBOOT="uboot.img" 11ae33e311SJoseph ChenIMG_BOOT="boot.img" 12ae33e311SJoseph ChenITB_UBOOT="${FIT_DIR}/uboot.itb" 13ae33e311SJoseph ChenITB_BOOT="${FIT_DIR}/boot.itb" 14ae33e311SJoseph ChenSIG_BIN="data2sign.bin" 15ae33e311SJoseph ChenSIG_UBOOT="${FIT_DIR}/uboot.data2sign" 16ae33e311SJoseph ChenSIG_BOOT="${FIT_DIR}/boot.data2sign" 17ae33e311SJoseph Chen# offs 18ae33e311SJoseph ChenOFFS_NS_UBOOT="0xa00" 19ae33e311SJoseph ChenOFFS_S_UBOOT="0xc00" 20ae33e311SJoseph ChenOFFS_NS_BOOT="0x800" 21ae33e311SJoseph ChenOFFS_S_BOOT="0xc00" 22ae33e311SJoseph Chen# file 23ae33e311SJoseph ChenCHIP_FILE="arch/arm/lib/.asm-offsets.s.cmd" 24ae33e311SJoseph Chen# placeholder address 25ae33e311SJoseph ChenFDT_ADDR_PLACEHOLDER="0xffffff00" 26ae33e311SJoseph ChenKERNEL_ADDR_PLACEHOLDER="0xffffff01" 27ae33e311SJoseph ChenRAMDISK_ADDR_PLACEHOLDER="0xffffff02" 28ae33e311SJoseph Chen# tools 29ae33e311SJoseph ChenMKIMAGE="./tools/mkimage" 30ae33e311SJoseph ChenFIT_UNPACK="./scripts/fit-unpack.sh" 31ae33e311SJoseph ChenCHECK_SIGN="./tools/fit_check_sign" 32ae33e311SJoseph Chen# key 33ae33e311SJoseph ChenKEY_DIR="keys/" 34ae33e311SJoseph ChenRSA_PRI_KEY="keys/dev.key" 35ae33e311SJoseph ChenRSA_PUB_KEY="keys/dev.crt" 36ae33e311SJoseph ChenSIGNATURE_KEY_NODE="/signature/key-dev" 37ae33e311SJoseph ChenSPL_DTB="spl/u-boot-spl.dtb" 38ae33e311SJoseph ChenUBOOT_DTB="u-boot.dtb" 39ae33e311SJoseph Chen# its 40ae33e311SJoseph ChenITS_UBOOT="u-boot.its" 41ae33e311SJoseph ChenITS_BOOT="boot.its" 42ae33e311SJoseph ChenARG_VER_UBOOT="0" 43ae33e311SJoseph ChenARG_VER_BOOT="0" 44ae33e311SJoseph Chen 45ae33e311SJoseph Chenfunction help() 46ae33e311SJoseph Chen{ 47ae33e311SJoseph Chen echo 48ae33e311SJoseph Chen echo "usage:" 49ae33e311SJoseph Chen echo " $0 [args]" 50ae33e311SJoseph Chen echo 51ae33e311SJoseph Chen echo "args:" 52ae33e311SJoseph Chen echo " --rollback-index-boot <decimal integer>" 53ae33e311SJoseph Chen echo " --rollback-index-uboot <decimal integer>" 54ae33e311SJoseph Chen echo " --version-uboot <decimal integer>" 55ae33e311SJoseph Chen echo " --version-boot <decimal integer>" 56ae33e311SJoseph Chen echo " --ini-trust" 57ae33e311SJoseph Chen echo " --ini-loader" 58ae33e311SJoseph Chen echo " --no-check" 59ae33e311SJoseph Chen echo " --spl-new" 60ae33e311SJoseph Chen echo " --boot_img" 61*2d11b868SJoseph Chen echo " --args" 62ae33e311SJoseph Chen echo 63ae33e311SJoseph Chen} 64ae33e311SJoseph Chen 65ae33e311SJoseph Chenfunction arg_check_decimal() 66ae33e311SJoseph Chen{ 67ae33e311SJoseph Chen if [ -z $1 ]; then 68ae33e311SJoseph Chen help 69ae33e311SJoseph Chen exit 1 70ae33e311SJoseph Chen fi 71ae33e311SJoseph Chen 72ae33e311SJoseph Chen decimal=`echo $1 |sed 's/[0-9]//g'` 73ae33e311SJoseph Chen if [ ! -z ${decimal} ]; then 74ae33e311SJoseph Chen echo "ERROR: $1 is not decimal integer" 75ae33e311SJoseph Chen help 76ae33e311SJoseph Chen exit 1 77ae33e311SJoseph Chen fi 78ae33e311SJoseph Chen} 79ae33e311SJoseph Chen 80ae33e311SJoseph Chenfunction check_its() 81ae33e311SJoseph Chen{ 82ae33e311SJoseph Chen cat $1 | while read line 83ae33e311SJoseph Chen do 84ae33e311SJoseph Chen file=`echo ${line} | sed -n "/incbin/p" | awk -F '"' '{ printf $2 }' | tr -d ' '` 85ae33e311SJoseph Chen if [ ! -f ${file} ]; then 86ae33e311SJoseph Chen echo "ERROR: No ${file}" 87ae33e311SJoseph Chen exit 1 88ae33e311SJoseph Chen fi 89ae33e311SJoseph Chen done 90ae33e311SJoseph Chen} 91ae33e311SJoseph Chen 92ae33e311SJoseph Chenfunction validate_arg() 93ae33e311SJoseph Chen{ 94ae33e311SJoseph Chen case $1 in 95*2d11b868SJoseph Chen --no-check|--spl-new) 96ae33e311SJoseph Chen shift=1 97ae33e311SJoseph Chen ;; 98ae33e311SJoseph Chen --ini-trust|--ini-loader|--rollback-index-boot|--rollback-index-uboot|--boot_img|--version-uboot|--version-boot) 99ae33e311SJoseph Chen shift=2 100ae33e311SJoseph Chen ;; 101ae33e311SJoseph Chen *) 102ae33e311SJoseph Chen shift=0 103ae33e311SJoseph Chen ;; 104ae33e311SJoseph Chen esac 105ae33e311SJoseph Chen echo ${shift} 106ae33e311SJoseph Chen} 107ae33e311SJoseph Chen 108ae33e311SJoseph Chenfunction fit_process_args() 109ae33e311SJoseph Chen{ 110ae33e311SJoseph Chen if [ $# -eq 0 ]; then 111ae33e311SJoseph Chen help 112ae33e311SJoseph Chen exit 0 113ae33e311SJoseph Chen fi 114ae33e311SJoseph Chen 115ae33e311SJoseph Chen while [ $# -gt 0 ]; do 116ae33e311SJoseph Chen case $1 in 117*2d11b868SJoseph Chen --args) 118ae33e311SJoseph Chen ARG_VALIDATE=$2 119ae33e311SJoseph Chen shift 2 120ae33e311SJoseph Chen ;; 121*2d11b868SJoseph Chen --boot_img) # boot.img 122*2d11b868SJoseph Chen ARG_BOOT_IMG=$2 123*2d11b868SJoseph Chen shift 2 124ae33e311SJoseph Chen ;; 125*2d11b868SJoseph Chen --boot_img_dir) # boot.img components directory 126*2d11b868SJoseph Chen ARG_BOOT_IMG_DIR=$2 127*2d11b868SJoseph Chen shift 2 128ae33e311SJoseph Chen ;; 129ae33e311SJoseph Chen --no-check) # No hostcc fit signature check 130ae33e311SJoseph Chen ARG_NO_CHECK="y" 131ae33e311SJoseph Chen shift 1 132ae33e311SJoseph Chen ;; 133ae33e311SJoseph Chen --ini-trust) # Assign trust ini file 134ae33e311SJoseph Chen ARG_INI_TRUST=$2 135ae33e311SJoseph Chen shift 2 136ae33e311SJoseph Chen ;; 137ae33e311SJoseph Chen --ini-loader) # Assign loader ini file 138ae33e311SJoseph Chen ARG_INI_LOADER=$2 139ae33e311SJoseph Chen shift 2 140ae33e311SJoseph Chen ;; 141ae33e311SJoseph Chen --spl-new) # Use current build u-boot-spl.bin to pack loader 142ae33e311SJoseph Chen ARG_SPL_NEW="y" 143ae33e311SJoseph Chen shift 1 144ae33e311SJoseph Chen ;; 145ae33e311SJoseph Chen --rollback-index-boot) 146ae33e311SJoseph Chen ARG_ROLLBACK_IDX_BOOT=$2 147ae33e311SJoseph Chen arg_check_decimal $2 148ae33e311SJoseph Chen shift 2 149ae33e311SJoseph Chen ;; 150ae33e311SJoseph Chen --rollback-index-uboot) 151ae33e311SJoseph Chen ARG_ROLLBACK_IDX_UBOOT=$2 152ae33e311SJoseph Chen arg_check_decimal $2 153ae33e311SJoseph Chen shift 2 154ae33e311SJoseph Chen ;; 155ae33e311SJoseph Chen --version-uboot) 156ae33e311SJoseph Chen ARG_VER_UBOOT=$2 157ae33e311SJoseph Chen arg_check_decimal $2 158ae33e311SJoseph Chen shift 2 159ae33e311SJoseph Chen ;; 160ae33e311SJoseph Chen --version-boot) 161ae33e311SJoseph Chen ARG_VER_BOOT=$2 162ae33e311SJoseph Chen arg_check_decimal $2 163ae33e311SJoseph Chen shift 2 164ae33e311SJoseph Chen ;; 165ae33e311SJoseph Chen *) 166ae33e311SJoseph Chen help 167ae33e311SJoseph Chen exit 1 168ae33e311SJoseph Chen ;; 169ae33e311SJoseph Chen esac 170ae33e311SJoseph Chen done 171*2d11b868SJoseph Chen 172*2d11b868SJoseph Chen if grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then 173*2d11b868SJoseph Chen ARG_SIGN="y" 174*2d11b868SJoseph Chen fi 175ae33e311SJoseph Chen} 176ae33e311SJoseph Chen 177*2d11b868SJoseph Chenfunction fit_raw_compile() 178ae33e311SJoseph Chen{ 179ae33e311SJoseph Chen # Verified-boot: should rebuild code but don't need to repack images. 180*2d11b868SJoseph Chen if [ "${ARG_SIGN}" == "y" ]; then 181*2d11b868SJoseph Chen ./make.sh --raw-compile 182ae33e311SJoseph Chen fi 183*2d11b868SJoseph Chen rm ${FIT_DIR} -rf && mkdir -p ${FIT_DIR} 184ae33e311SJoseph Chen} 185ae33e311SJoseph Chen 186ae33e311SJoseph Chenfunction fit_gen_uboot_itb() 187ae33e311SJoseph Chen{ 188ae33e311SJoseph Chen ./make.sh itb ${ARG_INI_TRUST} >/dev/null 2>&1 189ae33e311SJoseph Chen check_its ${ITS_UBOOT} 190ae33e311SJoseph Chen 191*2d11b868SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 192ae33e311SJoseph Chen ${MKIMAGE} -f ${ITS_UBOOT} -E -p ${OFFS_NS_UBOOT} ${ITB_UBOOT} -v ${ARG_VER_UBOOT} 193ae33e311SJoseph Chen if [ "${ARG_SPL_NEW}" == "y" ]; then 194ae33e311SJoseph Chen ./make.sh --spl ${ARG_INI_LOADER} 195ae33e311SJoseph Chen echo "pack loader with new: spl/u-boot-spl.bin" 196ae33e311SJoseph Chen else 197ae33e311SJoseph Chen ./make.sh loader ${ARG_INI_LOADER} 198ae33e311SJoseph Chen fi 199ae33e311SJoseph Chen else 200ae33e311SJoseph Chen if [ ! -f ${RSA_PRI_KEY} ]; then 201ae33e311SJoseph Chen echo "ERROR: No ${RSA_PRI_KEY} " 202ae33e311SJoseph Chen exit 1 203ae33e311SJoseph Chen elif [ ! -f ${RSA_PUB_KEY} ]; then 204ae33e311SJoseph Chen echo "ERROR: No ${RSA_PUB_KEY} " 205ae33e311SJoseph Chen exit 1 206ae33e311SJoseph Chen fi 207ae33e311SJoseph Chen 208ae33e311SJoseph Chen if ! grep -q '^CONFIG_SPL_FIT_SIGNATURE=y' .config ; then 209ae33e311SJoseph Chen echo "ERROR: CONFIG_SPL_FIT_SIGNATURE is disabled" 210ae33e311SJoseph Chen exit 1 211ae33e311SJoseph Chen fi 212ae33e311SJoseph Chen 213ae33e311SJoseph Chen if grep -q '^CONFIG_SPL_FIT_ROLLBACK_PROTECT=y' .config ; then 214ae33e311SJoseph Chen ARG_SPL_ROLLBACK_PROTECT="y" 215ae33e311SJoseph Chen if [ -z ${ARG_ROLLBACK_IDX_UBOOT} ]; then 216ae33e311SJoseph Chen echo "ERROR: No arg \"--rollback-index-uboot <n>\"" 217ae33e311SJoseph Chen exit 1 218ae33e311SJoseph Chen fi 219ae33e311SJoseph Chen fi 220ae33e311SJoseph Chen 221ae33e311SJoseph Chen if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then 222ae33e311SJoseph Chen VERSION=`grep 'rollback-index' ${ITS_UBOOT} | awk -F '=' '{ printf $2 }' ` 223ae33e311SJoseph Chen sed -i "s/${VERSION}/ <${ARG_ROLLBACK_IDX_UBOOT}>;/g" ${ITS_UBOOT} 224ae33e311SJoseph Chen fi 225ae33e311SJoseph Chen 226ae33e311SJoseph Chen # u-boot.dtb must contains rsa key 227ae33e311SJoseph Chen if ! fdtget -l ${UBOOT_DTB} /signature >/dev/null 2>&1 ; then 228ae33e311SJoseph Chen ${MKIMAGE} -f ${ITS_UBOOT} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_S_UBOOT} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT} 229*2d11b868SJoseph Chen echo "## Adding RSA public key into ${UBOOT_DTB}" 230ae33e311SJoseph Chen fi 231ae33e311SJoseph Chen 232ae33e311SJoseph Chen # Pack 233ae33e311SJoseph Chen ${MKIMAGE} -f ${ITS_UBOOT} -k ${KEY_DIR} -K ${SPL_DTB} -E -p ${OFFS_S_UBOOT} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT} 234ae33e311SJoseph Chen mv ${SIG_BIN} ${SIG_UBOOT} 235ae33e311SJoseph Chen 236ae33e311SJoseph Chen # rollback-index read back check 237ae33e311SJoseph Chen if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then 238ae33e311SJoseph Chen VERSION=`fdtget -ti ${ITB_UBOOT} /configurations/conf rollback-index` 239ae33e311SJoseph Chen if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_UBOOT}" ]; then 240ae33e311SJoseph Chen echo "ERROR: Failed to set rollback-index for ${ITB_UBOOT}"; 241ae33e311SJoseph Chen exit 1 242ae33e311SJoseph Chen fi 243ae33e311SJoseph Chen fi 244ae33e311SJoseph Chen 245ae33e311SJoseph Chen # host check signature 246ae33e311SJoseph Chen if [ "${ARG_NO_CHECK}" != "y" ]; then 247ae33e311SJoseph Chen if [ "${ARG_SPL_NEW}" == "y" ]; then 248ae33e311SJoseph Chen ${CHECK_SIGN} -f ${ITB_UBOOT} -k ${SPL_DTB} -s 249ae33e311SJoseph Chen else 250ae33e311SJoseph Chen spl_file="../rkbin/"`sed -n "/FlashBoot=/s/FlashBoot=//p" ${ARG_INI_LOADER} |tr -d '\r'` 251ae33e311SJoseph Chen offs=`fdtdump -s ${spl_file} | head -1 | awk -F ":" '{ print $2 }' | sed "s/ found fdt at offset //g" | tr -d " "` 252ae33e311SJoseph Chen if [ -z ${offs} ]; then 253ae33e311SJoseph Chen echo "ERROR: invalid ${spl_file} , unable to find fdt blob" 254ae33e311SJoseph Chen fi 255ae33e311SJoseph Chen offs=`printf %d ${offs} ` # hex -> dec 256ae33e311SJoseph Chen dd if=${spl_file} of=spl/u-boot-spl-old.dtb bs=${offs} skip=1 >/dev/null 2>&1 257ae33e311SJoseph Chen ${CHECK_SIGN} -f ${ITB_UBOOT} -k spl/u-boot-spl-old.dtb -s 258ae33e311SJoseph Chen fi 259ae33e311SJoseph Chen fi 260ae33e311SJoseph Chen 261ae33e311SJoseph Chen # minimize u-boot-spl.dtb 262ae33e311SJoseph Chen if grep -q '^CONFIG_SPL_FIT_HW_CRYPTO=y' .config ; then 263ae33e311SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0 264ae33e311SJoseph Chen if grep -q '^CONFIG_SPL_ROCKCHIP_CRYPTO_V1=y' .config ; then 265ae33e311SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 266ae33e311SJoseph Chen else 267ae33e311SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 268ae33e311SJoseph Chen fi 269ae33e311SJoseph Chen else 270ae33e311SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 271ae33e311SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 272ae33e311SJoseph Chen fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0 273ae33e311SJoseph Chen fi 274ae33e311SJoseph Chen 275ae33e311SJoseph Chen # repack spl 276ae33e311SJoseph Chen rm -f *_loader_*.bin 277ae33e311SJoseph Chen if [ "${ARG_SPL_NEW}" == "y" ]; then 278ae33e311SJoseph Chen cat spl/u-boot-spl-nodtb.bin > spl/u-boot-spl.bin 279ae33e311SJoseph Chen if ! grep -q '^CONFIG_SPL_SEPARATE_BSS=y' .config ; then 280ae33e311SJoseph Chen cat spl/u-boot-spl-pad.bin >> spl/u-boot-spl.bin 281ae33e311SJoseph Chen fi 282ae33e311SJoseph Chen cat ${SPL_DTB} >> spl/u-boot-spl.bin 283ae33e311SJoseph Chen 284ae33e311SJoseph Chen ./make.sh --spl ${ARG_INI_LOADER} 285ae33e311SJoseph Chen echo "pack loader with new: spl/u-boot-spl.bin" 286ae33e311SJoseph Chen else 287ae33e311SJoseph Chen ./make.sh loader ${ARG_INI_LOADER} 288ae33e311SJoseph Chen fi 289ae33e311SJoseph Chen fi 290ae33e311SJoseph Chen 291ae33e311SJoseph Chen rm -f u-boot.itb u-boot.img u-boot-dtb.img 292ae33e311SJoseph Chen mv ${ITS_UBOOT} ${FIT_DIR} 293ae33e311SJoseph Chen} 294ae33e311SJoseph Chen 295ae33e311SJoseph Chenfunction fit_gen_boot_itb() 296ae33e311SJoseph Chen{ 297*2d11b868SJoseph Chen if [ ! -z ${ARG_BOOT_IMG} ]; then 298*2d11b868SJoseph Chen ${FIT_UNPACK} -f ${ARG_BOOT_IMG} -o ${FIT_DIR}/unpack 299ae33e311SJoseph Chen ITS_BOOT="${FIT_DIR}/unpack/image.its" 300ae33e311SJoseph Chen else 301ae33e311SJoseph Chen compression=`awk -F"," '/COMPRESSION=/ { printf $1 }' ${ARG_INI_TRUST} | tr -d ' ' | cut -c 13-` 302ae33e311SJoseph Chen if [ -z "${compression}" ]; then 303ae33e311SJoseph Chen compression="none" 304ae33e311SJoseph Chen fi 305ae33e311SJoseph Chen ./arch/arm/mach-rockchip/make_fit_boot.sh -c ${compression} > ${ITS_BOOT} 306ae33e311SJoseph Chen check_its ${ITS_BOOT} 307ae33e311SJoseph Chen fi 308ae33e311SJoseph Chen 309*2d11b868SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 310ae33e311SJoseph Chen ${MKIMAGE} -f ${ITS_BOOT} -E -p ${OFFS_NS_BOOT} ${ITB_BOOT} -v ${ARG_VER_BOOT} 311ae33e311SJoseph Chen else 312ae33e311SJoseph Chen if [ ! -f ${RSA_PRI_KEY} ]; then 313ae33e311SJoseph Chen echo "ERROR: No ${RSA_PRI_KEY}" 314ae33e311SJoseph Chen exit 1 315ae33e311SJoseph Chen elif [ ! -f ${RSA_PUB_KEY} ]; then 316ae33e311SJoseph Chen echo "ERROR: No ${RSA_PUB_KEY}" 317ae33e311SJoseph Chen exit 1 318ae33e311SJoseph Chen fi 319ae33e311SJoseph Chen 320ae33e311SJoseph Chen if ! grep -q '^CONFIG_FIT_SIGNATURE=y' .config ; then 321ae33e311SJoseph Chen echo "ERROR: CONFIG_FIT_SIGNATURE is disabled" 322ae33e311SJoseph Chen exit 1 323ae33e311SJoseph Chen fi 324ae33e311SJoseph Chen 325ae33e311SJoseph Chen if grep -q '^CONFIG_FIT_ROLLBACK_PROTECT=y' .config ; then 326ae33e311SJoseph Chen ARG_ROLLBACK_PROTECT="y" 327ae33e311SJoseph Chen if [ -z ${ARG_ROLLBACK_IDX_BOOT} ]; then 328ae33e311SJoseph Chen echo "ERROR: No arg \"--rollback-index-boot <n>\"" 329ae33e311SJoseph Chen exit 1 330ae33e311SJoseph Chen fi 331ae33e311SJoseph Chen fi 332ae33e311SJoseph Chen 333ae33e311SJoseph Chen # fixup 334ae33e311SJoseph Chen COMMON_FILE=`sed -n "/_common.h/p" ${CHIP_FILE} | awk '{ print $1 }'` 335ae33e311SJoseph Chen FDT_ADDR_R=`awk /fdt_addr_r/ ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'` 336ae33e311SJoseph Chen KERNEL_ADDR_R=`awk /kernel_addr_r/ ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'` 337ae33e311SJoseph Chen RMADISK_ADDR_R=`awk /ramdisk_addr_r/ ${COMMON_FILE} | awk -F '=' '{ print $2 }' | awk -F '\\' '{ print $1 }'` 338ae33e311SJoseph Chen sed -i "s/${FDT_ADDR_PLACEHOLDER}/${FDT_ADDR_R}/g" ${ITS_BOOT} 339ae33e311SJoseph Chen sed -i "s/${KERNEL_ADDR_PLACEHOLDER}/${KERNEL_ADDR_R}/g" ${ITS_BOOT} 340ae33e311SJoseph Chen sed -i "s/${RAMDISK_ADDR_PLACEHOLDER}/${RMADISK_ADDR_R}/g" ${ITS_BOOT} 341ae33e311SJoseph Chen if grep -q '^CONFIG_ARM64=y' .config ; then 342ae33e311SJoseph Chen sed -i 's/arch = "arm";/arch = "arm64";/g' ${ITS_BOOT} 343ae33e311SJoseph Chen fi 344ae33e311SJoseph Chen 345ae33e311SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 346ae33e311SJoseph Chen VERSION=`grep 'rollback-index' ${ITS_BOOT} | awk -F '=' '{ printf $2 }' ` 347ae33e311SJoseph Chen sed -i "s/${VERSION}/ <${ARG_ROLLBACK_IDX_BOOT}>;/g" ${ITS_BOOT} 348ae33e311SJoseph Chen fi 349ae33e311SJoseph Chen 350ae33e311SJoseph Chen ${MKIMAGE} -f ${ITS_BOOT} -k ${KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_S_BOOT} -r ${ITB_BOOT} -v ${ARG_VER_BOOT} 351ae33e311SJoseph Chen mv ${SIG_BIN} ${SIG_BOOT} 352ae33e311SJoseph Chen 353ae33e311SJoseph Chen # rollback-index read back check 354ae33e311SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 355ae33e311SJoseph Chen VERSION=`fdtget -ti ${ITB_BOOT} /configurations/conf rollback-index` 356ae33e311SJoseph Chen if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_BOOT}" ]; then 357ae33e311SJoseph Chen echo "ERROR: Failed to set rollback-index for ${ITB_BOOT}"; 358ae33e311SJoseph Chen exit 1 359ae33e311SJoseph Chen fi 360ae33e311SJoseph Chen fi 361ae33e311SJoseph Chen 362ae33e311SJoseph Chen if [ "${ARG_NO_CHECK}" != "y" ]; then 363ae33e311SJoseph Chen ${CHECK_SIGN} -f ${ITB_BOOT} -k ${UBOOT_DTB} 364ae33e311SJoseph Chen fi 365ae33e311SJoseph Chen 366ae33e311SJoseph Chen # minimize u-boot.dtb 367ae33e311SJoseph Chen if grep -q '^CONFIG_FIT_HW_CRYPTO=y' .config ; then 368ae33e311SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0 369ae33e311SJoseph Chen if grep -q '^CONFIG_ROCKCHIP_CRYPTO_V1=y' .config ; then 370ae33e311SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 371ae33e311SJoseph Chen else 372ae33e311SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 373ae33e311SJoseph Chen fi 374ae33e311SJoseph Chen else 375ae33e311SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0 376ae33e311SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0 377ae33e311SJoseph Chen fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0 378ae33e311SJoseph Chen fi 379ae33e311SJoseph Chen fi 380ae33e311SJoseph Chen 381ae33e311SJoseph Chen mv ${ITS_BOOT} ${FIT_DIR} 382ae33e311SJoseph Chen} 383ae33e311SJoseph Chen 384ae33e311SJoseph Chenfunction fit_gen_uboot_img() 385ae33e311SJoseph Chen{ 386ae33e311SJoseph Chen ITB=$1 387ae33e311SJoseph Chen 388ae33e311SJoseph Chen if [ -z ${ITB} ]; then 389ae33e311SJoseph Chen ITB=${ITB_UBOOT} 390ae33e311SJoseph Chen fi 391ae33e311SJoseph Chen 392ae33e311SJoseph Chen ITB_MAX_NUM=`sed -n "/SPL_FIT_IMAGE_MULTIPLE/p" .config | awk -F "=" '{ print $2 }'` 393ae33e311SJoseph Chen ITB_MAX_KB=`sed -n "/SPL_FIT_IMAGE_KB/p" .config | awk -F "=" '{ print $2 }'` 394ae33e311SJoseph Chen ITB_MAX_BS=$((ITB_MAX_KB*1024)) 395ae33e311SJoseph Chen ITB_BS=`ls -l ${ITB} | awk '{ print $5 }'` 396ae33e311SJoseph Chen 397ae33e311SJoseph Chen if [ ${ITB_BS} -gt ${ITB_MAX_BS} ]; then 398ae33e311SJoseph Chen echo "ERROR: pack ${IMG_UBOOT} failed! ${ITB} actual: ${ITB_BS} bytes, max limit: ${ITB_MAX_BS} bytes" 399ae33e311SJoseph Chen exit 1 400ae33e311SJoseph Chen fi 401ae33e311SJoseph Chen 402ae33e311SJoseph Chen rm -f ${IMG_UBOOT} 403ae33e311SJoseph Chen for ((i = 0; i < ${ITB_MAX_NUM}; i++)); 404ae33e311SJoseph Chen do 405ae33e311SJoseph Chen cat ${ITB} >> ${IMG_UBOOT} 406ae33e311SJoseph Chen truncate -s %${ITB_MAX_KB}K ${IMG_UBOOT} 407ae33e311SJoseph Chen done 408ae33e311SJoseph Chen} 409ae33e311SJoseph Chen 410ae33e311SJoseph Chenfunction fit_gen_boot_img() 411ae33e311SJoseph Chen{ 412ae33e311SJoseph Chen ITB=$1 413ae33e311SJoseph Chen 414ae33e311SJoseph Chen if [ -z ${ITB} ]; then 415ae33e311SJoseph Chen ITB=${ITB_BOOT} 416ae33e311SJoseph Chen fi 417ae33e311SJoseph Chen 418ae33e311SJoseph Chen if [ "${ITB}" != "${IMG_BOOT}" ]; then 419ae33e311SJoseph Chen cp ${ITB} ${IMG_BOOT} -f 420ae33e311SJoseph Chen fi 421ae33e311SJoseph Chen} 422ae33e311SJoseph Chen 423ae33e311SJoseph Chenfunction fit_msg_uboot() 424ae33e311SJoseph Chen{ 425*2d11b868SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 426ae33e311SJoseph Chen MSG_SIGN="no-signed" 427ae33e311SJoseph Chen else 428ae33e311SJoseph Chen MSG_SIGN="signed" 429ae33e311SJoseph Chen fi 430ae33e311SJoseph Chen 431ae33e311SJoseph Chen VERSION=`fdtget -ti ${ITB_UBOOT} / version` 432ae33e311SJoseph Chen if [ "${VERSION}" != "" ]; then 433ae33e311SJoseph Chen MSG_VER=", version=${VERSION}" 434ae33e311SJoseph Chen fi 435ae33e311SJoseph Chen 436ae33e311SJoseph Chen if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then 437ae33e311SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_UBOOT}): ${IMG_UBOOT} (with uboot, trust...) is ready" 438ae33e311SJoseph Chen else 439ae33e311SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_UBOOT} (FIT with uboot, trust...) is ready" 440ae33e311SJoseph Chen fi 441ae33e311SJoseph Chen} 442ae33e311SJoseph Chen 443ae33e311SJoseph Chenfunction fit_msg_boot() 444ae33e311SJoseph Chen{ 445*2d11b868SJoseph Chen if [ "${ARG_SIGN}" != "y" ]; then 446ae33e311SJoseph Chen MSG_SIGN="no-signed" 447ae33e311SJoseph Chen else 448ae33e311SJoseph Chen MSG_SIGN="signed" 449ae33e311SJoseph Chen fi 450ae33e311SJoseph Chen 451ae33e311SJoseph Chen VERSION=`fdtget -ti ${ITB_BOOT} / version` 452ae33e311SJoseph Chen if [ "${VERSION}" != "" ]; then 453ae33e311SJoseph Chen MSG_VER=", version=${VERSION}" 454ae33e311SJoseph Chen fi 455ae33e311SJoseph Chen 456ae33e311SJoseph Chen if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then 457ae33e311SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}, rollback-index=${ARG_ROLLBACK_IDX_BOOT}): ${IMG_BOOT} is ready" 458ae33e311SJoseph Chen else 459ae33e311SJoseph Chen echo "Image(${MSG_SIGN}${MSG_VER}): ${IMG_BOOT} (FIT with kernel, fdt, resource...) is ready" 460ae33e311SJoseph Chen fi 461ae33e311SJoseph Chen} 462ae33e311SJoseph Chen 463ae33e311SJoseph Chenfunction fit_msg_loader() 464ae33e311SJoseph Chen{ 465ae33e311SJoseph Chen LOADER=`ls *loader*.bin` 466ae33e311SJoseph Chen echo "Image(no-signed): ${LOADER} (with spl, ddr, usbplug) is ready" 467ae33e311SJoseph Chen} 468ae33e311SJoseph Chen 469*2d11b868SJoseph Chenfunction fit_generate_uboot() 470ae33e311SJoseph Chen{ 471*2d11b868SJoseph Chen fit_raw_compile 472ae33e311SJoseph Chen fit_gen_uboot_itb 473ae33e311SJoseph Chen fit_gen_uboot_img 474ae33e311SJoseph Chen echo 475ae33e311SJoseph Chen fit_msg_uboot 476ae33e311SJoseph Chen} 477ae33e311SJoseph Chen 478*2d11b868SJoseph Chenfunction fit_generate_uboot_boot() 479ae33e311SJoseph Chen{ 480*2d11b868SJoseph Chen fit_raw_compile 481ae33e311SJoseph Chen fit_gen_boot_itb 482ae33e311SJoseph Chen fit_gen_boot_img 483ae33e311SJoseph Chen fit_gen_uboot_itb 484ae33e311SJoseph Chen fit_gen_uboot_img 485ae33e311SJoseph Chen echo 486ae33e311SJoseph Chen 487ae33e311SJoseph Chen fit_msg_uboot 488ae33e311SJoseph Chen fit_msg_boot 489ae33e311SJoseph Chen fit_msg_loader 490ae33e311SJoseph Chen echo 491ae33e311SJoseph Chen} 492ae33e311SJoseph Chen 493ae33e311SJoseph Chenfit_process_args $* 494ae33e311SJoseph Chenif [ ! -z "${ARG_VALIDATE}" ]; then 495ae33e311SJoseph Chen validate_arg ${ARG_VALIDATE} 496*2d11b868SJoseph Chenelif [ ! -z "${ARG_BOOT_IMG}" ]; then 497*2d11b868SJoseph Chen fit_generate_uboot_boot 498*2d11b868SJoseph Chenelse 499*2d11b868SJoseph Chen fit_generate_uboot 500ae33e311SJoseph Chenfi 501ae33e311SJoseph Chen 502