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="0xa00" 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 [ ! -d ${DATA} ]; then 52 echo "ERROR: No input directory ${DATA}" 53 exit 1 54 fi 55 56 COPIES=`strings ${IMAGE} | grep "rollback-index" | wc -l` 57 if [ ${COPIES} -eq 0 ]; then 58 echo "ERROR: Invalid fit image" 59 exit 1 60 fi 61 62 IMG_BS=`ls -l ${IMAGE} | awk '{ print $5 }'` 63 ITB_KB=`expr ${IMG_BS} / ${COPIES} / 1024` 64 65 rm -rf ${OUT} && mkdir -p ${OUT} 66 ${UNPACK} -f ${IMAGE} -o ${OUT}/ 67 find ${DATA}/ -maxdepth 1 -type f | xargs cp -t ${OUT}/ 68 69 if fdtget -l ${IMAGE} /images/uboot >/dev/null 2>&1 ; then 70 rm -f ${IMAGE} 71 ${MKIMAGE} -f ${ITS} -E -p ${OFFS} ${ITB} 72 for ((i = 0; i < ${COPIES}; i++)); 73 do 74 cat ${ITB} >> ${IMAGE} 75 truncate -s %${ITB_KB}K ${IMAGE} 76 done 77 else 78 ${MKIMAGE} -f ${ITS} -E -p ${OFFS} ${IMAGE} 79 fi 80 81 rm ${OUT} -rf 82 echo 83 echo "Image(repack): ${IMAGE} is ready" 84} 85 86fit_repack $* 87 88