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