1
0
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
1.5 KiB

#!/bin/bash
#
# Copyright (c) 2020 Rockchip Electronics Co., Ltd
#
# SPDX-License-Identifier: GPL-2.0
#
set -e
MKIMAGE="./tools/mkimage"
UNPACK="./scripts/fit-unpack.sh"
OFFS="0x1000"
OUT="out/repack"
ITB="out/repack/image.itb"
ITS="out/repack/image.its"
function usage_repack()
{
echo
echo "usage:"
echo " $0 -f [image] -d [data dir]"
echo
}
function fit_repack()
{
if [ $# -ne 4 ]; then
usage_repack
exit 1
fi
while [ $# -gt 0 ]; do
case $1 in
-f)
IMAGE=$2
shift 2
;;
-d)
DATA=$2
shift 2
;;
*)
usage_repack
exit 1
;;
esac
done
if [ ! -f ${IMAGE} ]; then
echo "ERROR: No ${IMAGE}"
exit 1
elif ! file ${IMAGE} | grep 'Device Tree Blob' ; then
echo "ERROR: ${IMAGE} is not FIT image"
exit 1
elif [ ! -d ${DATA} ]; then
echo "ERROR: No input directory ${DATA}"
exit 1
fi
COPIES=`strings ${IMAGE} | grep "rollback-index" | wc -l`
if [ ${COPIES} -eq 0 ]; then
echo "ERROR: Invalid fit image"
exit 1
fi
IMG_BS=`ls -l ${IMAGE} | awk '{ print $5 }'`
ITB_KB=`expr ${IMG_BS} / ${COPIES} / 1024`
rm -rf ${OUT} && mkdir -p ${OUT}
${UNPACK} -f ${IMAGE} -o ${OUT}/
find ${DATA}/ -maxdepth 1 -type f | xargs cp -t ${OUT}/
if fdtget -l ${IMAGE} /images/uboot >/dev/null 2>&1 ; then
rm -f ${IMAGE}
${MKIMAGE} -f ${ITS} -E -p ${OFFS} ${ITB}
for ((i = 0; i < ${COPIES}; i++));
do
cat ${ITB} >> ${IMAGE}
truncate -s %${ITB_KB}K ${IMAGE}
done
else
${MKIMAGE} -f ${ITS} -E -p ${OFFS} ${IMAGE}
fi
rm ${OUT} -rf
echo
echo "Image(repack): ${IMAGE} is ready"
}
fit_repack $*