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