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