13d0407baSopenharmony_ci#!/bin/bash 23d0407baSopenharmony_ci# SPDX-License-Identifier: GPL-2.0 33d0407baSopenharmony_ci# Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd. 43d0407baSopenharmony_ci 53d0407baSopenharmony_ciset -e 63d0407baSopenharmony_ci 73d0407baSopenharmony_ciusage() { 83d0407baSopenharmony_ci cat >&2 << USAGE 93d0407baSopenharmony_ciusage: $0 [-h] --dtb DTB 103d0407baSopenharmony_ci 113d0407baSopenharmony_cioptional arguments: 123d0407baSopenharmony_ci -h, --help show this help message and exit 133d0407baSopenharmony_ci --dtb DTB the dtb file name 143d0407baSopenharmony_ciUSAGE 153d0407baSopenharmony_ci} 163d0407baSopenharmony_ci 173d0407baSopenharmony_ci# Parse command-line arguments 183d0407baSopenharmony_ciwhile [ $# -gt 0 ]; do 193d0407baSopenharmony_ci case $1 in 203d0407baSopenharmony_ci --dtb) 213d0407baSopenharmony_ci DTB=$2 223d0407baSopenharmony_ci shift 2 233d0407baSopenharmony_ci ;; 243d0407baSopenharmony_ci -h) 253d0407baSopenharmony_ci usage 263d0407baSopenharmony_ci exit 0 273d0407baSopenharmony_ci ;; 283d0407baSopenharmony_ci --help) 293d0407baSopenharmony_ci usage 303d0407baSopenharmony_ci exit 0 313d0407baSopenharmony_ci ;; 323d0407baSopenharmony_ci *) 333d0407baSopenharmony_ci shift 343d0407baSopenharmony_ci ;; 353d0407baSopenharmony_ci esac 363d0407baSopenharmony_cidone 373d0407baSopenharmony_ci 383d0407baSopenharmony_cisrctree=${srctree-"."} 393d0407baSopenharmony_ciobjtree=${objtree-"."} 403d0407baSopenharmony_ciif [ "${ARCH}" == "" ]; then 413d0407baSopenharmony_ci if [ "$($srctree/scripts/config --state CONFIG_ARM)" == "y" ]; then 423d0407baSopenharmony_ci ARCH=arm 433d0407baSopenharmony_ci else 443d0407baSopenharmony_ci ARCH=arm64 453d0407baSopenharmony_ci fi 463d0407baSopenharmony_cifi 473d0407baSopenharmony_ci 483d0407baSopenharmony_ciLOGO_PATH=${srctree}/logo.bmp 493d0407baSopenharmony_ci[ -f ${LOGO_PATH} ] && LOGO=logo.bmp 503d0407baSopenharmony_ci 513d0407baSopenharmony_ciLOGO_KERNEL_PATH=${srctree}/logo_kernel.bmp 523d0407baSopenharmony_ci[ -f ${LOGO_KERNEL_PATH} ] && LOGO_KERNEL=logo_kernel.bmp 533d0407baSopenharmony_ci 543d0407baSopenharmony_ciKERNEL_IMAGE_PATH=${objtree}/arch/${ARCH}/boot/Image 553d0407baSopenharmony_ciKERNEL_IMAGE_ARG="--kernel ${KERNEL_IMAGE_PATH}" 563d0407baSopenharmony_ciif [ "${ARCH}" == "arm" ]; then 573d0407baSopenharmony_ci DTB_PATH=${objtree}/arch/arm/boot/dts/${DTB} 583d0407baSopenharmony_ci KERNEL_ZIMAGE_PATH=${objtree}/arch/arm/boot/zImage 593d0407baSopenharmony_ci KERNEL_ZIMAGE_ARG="--kernel ${KERNEL_ZIMAGE_PATH}" 603d0407baSopenharmony_ci ZIMAGE=zImage 613d0407baSopenharmony_cielse 623d0407baSopenharmony_ci DTB_PATH=${objtree}/arch/arm64/boot/dts/rockchip/${DTB} 633d0407baSopenharmony_ci KERNEL_ZIMAGE_ARG="--kernel ${objtree}/arch/arm64/boot/Image.lz4" 643d0407baSopenharmony_ci ZIMAGE=Image.lz4 653d0407baSopenharmony_cifi 663d0407baSopenharmony_ciif [ ! -f ${DTB_PATH} ]; then 673d0407baSopenharmony_ci echo "No dtb" >&2 683d0407baSopenharmony_ci usage 693d0407baSopenharmony_ci exit 1 703d0407baSopenharmony_cifi 713d0407baSopenharmony_ci 723d0407baSopenharmony_ciOUT=out 733d0407baSopenharmony_ciITB=${BOOT_IMG} 743d0407baSopenharmony_ciITS=${OUT}/boot.its 753d0407baSopenharmony_ciMKIMAGE=${MKIMAGE-"mkimage"} 763d0407baSopenharmony_ciMKIMAGE_ARG="-E -p 0x800" 773d0407baSopenharmony_ci 783d0407baSopenharmony_cimake_boot_img() 793d0407baSopenharmony_ci{ 803d0407baSopenharmony_ci RAMDISK_IMG_PATH=${objtree}/ramdisk.img 813d0407baSopenharmony_ci [ -f ${RAMDISK_IMG_PATH} ] && RAMDISK_IMG=ramdisk.img && RAMDISK_ARG="--ramdisk ${RAMDISK_IMG_PATH}" 823d0407baSopenharmony_ci 833d0407baSopenharmony_ci ${srctree}/scripts/mkbootimg \ 843d0407baSopenharmony_ci ${KERNEL_IMAGE_ARG} \ 853d0407baSopenharmony_ci ${RAMDISK_ARG} \ 863d0407baSopenharmony_ci --second resource.img \ 873d0407baSopenharmony_ci -o boot.img && \ 883d0407baSopenharmony_ci echo " Image: boot.img (with Image ${RAMDISK_IMG} resource.img) is ready"; 893d0407baSopenharmony_ci ${srctree}/scripts/mkbootimg \ 903d0407baSopenharmony_ci ${KERNEL_ZIMAGE_ARG} \ 913d0407baSopenharmony_ci ${RAMDISK_ARG} \ 923d0407baSopenharmony_ci --second resource.img \ 933d0407baSopenharmony_ci -o zboot.img && \ 943d0407baSopenharmony_ci echo " Image: zboot.img (with ${ZIMAGE} ${RAMDISK_IMG} resource.img) is ready" 953d0407baSopenharmony_ci} 963d0407baSopenharmony_ci 973d0407baSopenharmony_cirepack_boot_img() 983d0407baSopenharmony_ci{ 993d0407baSopenharmony_ci ${srctree}/scripts/repack-bootimg \ 1003d0407baSopenharmony_ci --boot_img ${BOOT_IMG} --out ${OUT} \ 1013d0407baSopenharmony_ci ${KERNEL_IMAGE_ARG} \ 1023d0407baSopenharmony_ci --second resource.img \ 1033d0407baSopenharmony_ci --dtb ${DTB_PATH} \ 1043d0407baSopenharmony_ci -o boot.img && 1053d0407baSopenharmony_ci echo " Image: boot.img (${BOOT_IMG} + Image) is ready"; 1063d0407baSopenharmony_ci ${srctree}/scripts/repack-bootimg \ 1073d0407baSopenharmony_ci --boot_img ${BOOT_IMG} --out ${OUT} \ 1083d0407baSopenharmony_ci ${KERNEL_ZIMAGE_ARG} \ 1093d0407baSopenharmony_ci --second resource.img \ 1103d0407baSopenharmony_ci --dtb ${DTB_PATH} \ 1113d0407baSopenharmony_ci -o zboot.img && \ 1123d0407baSopenharmony_ci echo " Image: zboot.img (${BOOT_IMG} + ${ZIMAGE}) is ready" 1133d0407baSopenharmony_ci} 1143d0407baSopenharmony_ci 1153d0407baSopenharmony_cicheck_mkimage() 1163d0407baSopenharmony_ci{ 1173d0407baSopenharmony_ci MKIMAGE=$(type -path ${MKIMAGE}) 1183d0407baSopenharmony_ci if [ -z "${MKIMAGE}" ]; then 1193d0407baSopenharmony_ci # Doesn't exist 1203d0407baSopenharmony_ci echo '"mkimage" command not found - U-Boot images will not be built' >&2 1213d0407baSopenharmony_ci exit 1; 1223d0407baSopenharmony_ci fi 1233d0407baSopenharmony_ci} 1243d0407baSopenharmony_ci 1253d0407baSopenharmony_ciunpack_itb() 1263d0407baSopenharmony_ci{ 1273d0407baSopenharmony_ci mkdir -p ${OUT} 1283d0407baSopenharmony_ci rm -f ${OUT}/fdt ${OUT}/kernel ${OUT}/resource 1293d0407baSopenharmony_ci 1303d0407baSopenharmony_ci for NAME in $(fdtget -l ${ITB} /images) 1313d0407baSopenharmony_ci do 1323d0407baSopenharmony_ci # generate image 1333d0407baSopenharmony_ci NODE="/images/${NAME}" 1343d0407baSopenharmony_ci OFFS=$(fdtget -ti ${ITB} ${NODE} data-position) 1353d0407baSopenharmony_ci SIZE=$(fdtget -ti ${ITB} ${NODE} data-size) 1363d0407baSopenharmony_ci if [ -z ${OFFS} ]; then 1373d0407baSopenharmony_ci continue; 1383d0407baSopenharmony_ci fi 1393d0407baSopenharmony_ci 1403d0407baSopenharmony_ci if [ ${SIZE} -ne 0 ]; then 1413d0407baSopenharmony_ci dd if=${ITB} of=${OUT}/${NAME} bs=${SIZE} count=1 skip=${OFFS} iflag=skip_bytes >/dev/null 2>&1 1423d0407baSopenharmony_ci else 1433d0407baSopenharmony_ci touch ${OUT}/${NAME} 1443d0407baSopenharmony_ci fi 1453d0407baSopenharmony_ci done 1463d0407baSopenharmony_ci 1473d0407baSopenharmony_ci [ ! -f ${OUT}/kernel ] && echo "FIT ${ITB} no kernel" >&2 && exit 1 || true 1483d0407baSopenharmony_ci} 1493d0407baSopenharmony_ci 1503d0407baSopenharmony_cigen_its() 1513d0407baSopenharmony_ci{ 1523d0407baSopenharmony_ci TMP_ITB=${OUT}/boot.tmp 1533d0407baSopenharmony_ci 1543d0407baSopenharmony_ci # add placeholder 1553d0407baSopenharmony_ci cp -a ${ITB} ${TMP_ITB} 1563d0407baSopenharmony_ci for NAME in $(fdtget -l ${ITB} /images); do 1573d0407baSopenharmony_ci fdtput -t s ${TMP_ITB} /images/${NAME} data "/INCBIN/(${NAME})" 1583d0407baSopenharmony_ci done 1593d0407baSopenharmony_ci dtc -I dtb -O dts ${TMP_ITB} -o ${ITS} >/dev/null 2>&1 1603d0407baSopenharmony_ci rm -f ${TMP_ITB} 1613d0407baSopenharmony_ci 1623d0407baSopenharmony_ci # fixup placeholder: data = "/INCBIN/(...)"; -> data = /incbin/("..."); 1633d0407baSopenharmony_ci sed -i "s/\"\/INCBIN\/(\(.*\))\"/\/incbin\/(\"\1\")/" ${ITS} 1643d0407baSopenharmony_ci 1653d0407baSopenharmony_ci # remove 1663d0407baSopenharmony_ci sed -i "/memreserve/d" ${ITS} 1673d0407baSopenharmony_ci sed -i "/timestamp/d" ${ITS} 1683d0407baSopenharmony_ci sed -i "/data-size/d" ${ITS} 1693d0407baSopenharmony_ci sed -i "/data-position/d" ${ITS} 1703d0407baSopenharmony_ci sed -i "/value/d" ${ITS} 1713d0407baSopenharmony_ci sed -i "/hashed-strings/d" ${ITS} 1723d0407baSopenharmony_ci sed -i "/hashed-nodes/d" ${ITS} 1733d0407baSopenharmony_ci sed -i "/signer-version/d" ${ITS} 1743d0407baSopenharmony_ci sed -i "/signer-name/d" ${ITS} 1753d0407baSopenharmony_ci} 1763d0407baSopenharmony_ci 1773d0407baSopenharmony_cigen_itb() 1783d0407baSopenharmony_ci{ 1793d0407baSopenharmony_ci [ -f ${OUT}/fdt ] && cp -a ${DTB_PATH} ${OUT}/fdt && FDT=" + ${DTB}" 1803d0407baSopenharmony_ci [ -f ${OUT}/resource ] && cp -a resource.img ${OUT}/resource && RESOURCE=" + resource.img" 1813d0407baSopenharmony_ci COMP=$(fdtget ${ITB} /images/kernel compression) 1823d0407baSopenharmony_ci case "${COMP}" in 1833d0407baSopenharmony_ci gzip) EXT=".gz";; 1843d0407baSopenharmony_ci lz4) EXT=".lz4";; 1853d0407baSopenharmony_ci bzip2) EXT=".bz2";; 1863d0407baSopenharmony_ci lzma) EXT=".lzma";; 1873d0407baSopenharmony_ci lzo) EXT=".lzo";; 1883d0407baSopenharmony_ci esac 1893d0407baSopenharmony_ci cp -a ${KERNEL_IMAGE_PATH}${EXT} ${OUT}/kernel && \ 1903d0407baSopenharmony_ci ${MKIMAGE} ${MKIMAGE_ARG} -f ${ITS} boot.img >/dev/null && \ 1913d0407baSopenharmony_ci echo " Image: boot.img (FIT ${BOOT_IMG} + Image${EXT}${FDT}${RESOURCE}) is ready"; 1923d0407baSopenharmony_ci if [ "${EXT}" == "" ] && [ -f ${KERNEL_ZIMAGE_PATH} ]; then 1933d0407baSopenharmony_ci cp -a ${KERNEL_ZIMAGE_PATH} ${OUT}/kernel && \ 1943d0407baSopenharmony_ci ${MKIMAGE} ${MKIMAGE_ARG} -f ${ITS} zboot.img >/dev/null && \ 1953d0407baSopenharmony_ci echo " Image: zboot.img (FIT ${BOOT_IMG} + zImage${FDT}${RESOURCE}) is ready"; 1963d0407baSopenharmony_ci fi 1973d0407baSopenharmony_ci} 1983d0407baSopenharmony_ci 1993d0407baSopenharmony_cirepack_itb() 2003d0407baSopenharmony_ci{ 2013d0407baSopenharmony_ci check_mkimage 2023d0407baSopenharmony_ci unpack_itb 2033d0407baSopenharmony_ci gen_its 2043d0407baSopenharmony_ci gen_itb 2053d0407baSopenharmony_ci} 2063d0407baSopenharmony_ci 2073d0407baSopenharmony_ciif [ -x ${srctree}/scripts/bmpconvert ]; then 2083d0407baSopenharmony_ci if [ -f ${LOGO_PATH} ]; then 2093d0407baSopenharmony_ci ${srctree}/scripts/bmpconvert ${LOGO_PATH}; 2103d0407baSopenharmony_ci fi 2113d0407baSopenharmony_ci if [ -f ${LOGO_KERNEL_PATH} ]; then 2123d0407baSopenharmony_ci ${srctree}/scripts/bmpconvert ${LOGO_KERNEL_PATH}; 2133d0407baSopenharmony_ci fi 2143d0407baSopenharmony_cifi 2153d0407baSopenharmony_ci 2163d0407baSopenharmony_ciif [ "${srctree}" != "${objtree}" ]; then 2173d0407baSopenharmony_ci if [ -f ${LOGO_PATH} ]; then 2183d0407baSopenharmony_ci cp -a ${LOGO_PATH} ${objtree}/; 2193d0407baSopenharmony_ci fi 2203d0407baSopenharmony_ci if [ -f ${LOGO_KERNEL_PATH} ]; then 2213d0407baSopenharmony_ci cp -a ${LOGO_KERNEL_PATH} ${objtree}/; 2223d0407baSopenharmony_ci fi 2233d0407baSopenharmony_cifi 2243d0407baSopenharmony_ciscripts/resource_tool ${DTB_PATH} ${LOGO} ${LOGO_KERNEL} >/dev/null 2253d0407baSopenharmony_ciecho " Image: resource.img (with ${DTB} ${LOGO} ${LOGO_KERNEL}) is ready" 2263d0407baSopenharmony_ci 2273d0407baSopenharmony_ciif [ -f "${BOOT_IMG}" ]; then 2283d0407baSopenharmony_ci if file -p -b ${BOOT_IMG} | grep -q 'Device Tree Blob' ; then 2293d0407baSopenharmony_ci repack_itb; 2303d0407baSopenharmony_ci elif [ -x ${srctree}/scripts/repack-bootimg ]; then 2313d0407baSopenharmony_ci repack_boot_img; 2323d0407baSopenharmony_ci fi 2333d0407baSopenharmony_cielif [ -x ${srctree}/scripts/mkbootimg ]; then 2343d0407baSopenharmony_ci make_boot_img; 2353d0407baSopenharmony_cifi 236