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
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 $*
|
|
|