xref: /rk3399_rockchip-uboot/scripts/fit-repack.sh (revision 2a3fb7bb049d69d96f3bc7dae8caa756fdc8a613)
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	IMAGE_BS=`ls -l ${IMAGE} | awk '{ print $5 }'`
63	ITB_SZ_KB=`expr ${IMAGE_BS} / ${COPIES} / 1024`
64
65	rm -rf ${OUT}
66	mkdir -p ${OUT}
67	${UNPACK} -f ${IMAGE} -o ${OUT}/
68	find ${DATA}/ -maxdepth 1 -type f | xargs cp -t ${OUT}/
69
70	if fdtget -l ${IMAGE} /images/uboot >/dev/null 2>&1 ; then
71		rm -f ${IMAGE}
72		${MKIMAGE} -f ${ITS} -E -p ${OFFS} ${ITB}
73		for ((i = 0; i < ${COPIES}; i++));
74		do
75			cat ${ITB} >> ${IMAGE}
76			truncate -s %${ITB_SZ_KB}K ${IMAGE}
77		done
78	else
79		${MKIMAGE} -f ${ITS} -E -p ${OFFS} ${IMAGE}
80	fi
81
82	rm ${OUT} -rf
83	echo
84	echo "Image(repack):  ${IMAGE} is ready"
85}
86
87fit_repack $*
88
89