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