1#!/bin/bash 2# 3# Copyright (c) 2020 Rockchip Electronics Co., Ltd 4# 5# SPDX-License-Identifier: GPL-2.0 6# 7set -e 8 9MKIMAGE="./tools/mkimage" 10UNPACK="./scripts/fit-unpack.sh" 11OFFS="0x1000" 12OUT="out/repack" 13ITB="out/repack/image.itb" 14ITS="out/repack/image.its" 15 16function usage_repack() 17{ 18 echo 19 echo "usage:" 20 echo " $0 -f [image] -d [data dir]" 21 echo 22} 23 24function fit_repack() 25{ 26 if [ $# -ne 4 ]; then 27 usage_repack 28 exit 1 29 fi 30 31 while [ $# -gt 0 ]; do 32 case $1 in 33 -f) 34 IMAGE=$2 35 shift 2 36 ;; 37 -d) 38 DATA=$2 39 shift 2 40 ;; 41 *) 42 usage_repack 43 exit 1 44 ;; 45 esac 46 done 47 48 if [ ! -f ${IMAGE} ]; then 49 echo "ERROR: No ${IMAGE}" 50 exit 1 51 elif ! file ${IMAGE} | grep 'Device Tree Blob' ; then 52 echo "ERROR: ${IMAGE} is not FIT image" 53 exit 1 54 elif [ ! -d ${DATA} ]; then 55 echo "ERROR: No input directory ${DATA}" 56 exit 1 57 fi 58 59 COPIES=`strings ${IMAGE} | grep "rollback-index" | wc -l` 60 if [ ${COPIES} -eq 0 ]; then 61 echo "ERROR: Invalid fit image" 62 exit 1 63 fi 64 65 IMG_BS=`ls -l ${IMAGE} | awk '{ print $5 }'` 66 ITB_KB=`expr ${IMG_BS} / ${COPIES} / 1024` 67 68 rm -rf ${OUT} && mkdir -p ${OUT} 69 ${UNPACK} -f ${IMAGE} -o ${OUT}/ 70 find ${DATA}/ -maxdepth 1 -type f | xargs cp -t ${OUT}/ 71 72 if fdtget -l ${IMAGE} /images/uboot >/dev/null 2>&1 ; then 73 rm -f ${IMAGE} 74 ${MKIMAGE} -f ${ITS} -E -p ${OFFS} ${ITB} 75 for ((i = 0; i < ${COPIES}; i++)); 76 do 77 cat ${ITB} >> ${IMAGE} 78 truncate -s %${ITB_KB}K ${IMAGE} 79 done 80 else 81 ${MKIMAGE} -f ${ITS} -E -p ${OFFS} ${IMAGE} 82 fi 83 84 rm ${OUT} -rf 85 echo 86 echo "Image(repack): ${IMAGE} is ready" 87} 88 89fit_repack $* 90 91