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