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 62*125d49daSJoseph Chen IMG_BS=`ls -l ${IMAGE} | awk '{ print $5 }'` 63*125d49daSJoseph Chen ITB_KB=`expr ${IMG_BS} / ${COPIES} / 1024` 64bc0a7e78SJoseph Chen 65*125d49daSJoseph Chen rm -rf ${OUT} && mkdir -p ${OUT} 66bc0a7e78SJoseph Chen ${UNPACK} -f ${IMAGE} -o ${OUT}/ 6734df577aSJoseph Chen find ${DATA}/ -maxdepth 1 -type f | xargs cp -t ${OUT}/ 68bc0a7e78SJoseph Chen 69bc0a7e78SJoseph Chen if fdtget -l ${IMAGE} /images/uboot >/dev/null 2>&1 ; then 70bc0a7e78SJoseph Chen rm -f ${IMAGE} 71bc0a7e78SJoseph Chen ${MKIMAGE} -f ${ITS} -E -p ${OFFS} ${ITB} 72bc0a7e78SJoseph Chen for ((i = 0; i < ${COPIES}; i++)); 73bc0a7e78SJoseph Chen do 74bc0a7e78SJoseph Chen cat ${ITB} >> ${IMAGE} 75*125d49daSJoseph Chen truncate -s %${ITB_KB}K ${IMAGE} 76bc0a7e78SJoseph Chen done 77bc0a7e78SJoseph Chen else 78bc0a7e78SJoseph Chen ${MKIMAGE} -f ${ITS} -E -p ${OFFS} ${IMAGE} 79bc0a7e78SJoseph Chen fi 80bc0a7e78SJoseph Chen 81bc0a7e78SJoseph Chen rm ${OUT} -rf 82bc0a7e78SJoseph Chen echo 83bc0a7e78SJoseph Chen echo "Image(repack): ${IMAGE} is ready" 84bc0a7e78SJoseph Chen} 85bc0a7e78SJoseph Chen 86bc0a7e78SJoseph Chenfit_repack $* 87bc0a7e78SJoseph Chen 88