xref: /OK3568_Linux_fs/u-boot/scripts/fit-repack.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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="0x1000"
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 ! file ${IMAGE} | grep 'Device Tree Blob' ; then
52		echo "ERROR: ${IMAGE} is not FIT image"
53		exit 1
54	elif [ ! -d ${DATA} ]; then
55		echo "ERROR: No input directory ${DATA}"
56		exit 1
57	fi
58
59	COPIES=`strings ${IMAGE} | grep "rollback-index"  | wc -l`
60	if [ ${COPIES} -eq 0 ]; then
61		echo "ERROR: Invalid fit image"
62		exit 1
63	fi
64
65	IMG_BS=`ls -l ${IMAGE} | awk '{ print $5 }'`
66	ITB_KB=`expr ${IMG_BS} / ${COPIES} / 1024`
67
68	rm -rf ${OUT} && mkdir -p ${OUT}
69	${UNPACK} -f ${IMAGE} -o ${OUT}/
70	find ${DATA}/ -maxdepth 1 -type f | xargs cp -t ${OUT}/
71
72	if fdtget -l ${IMAGE} /images/uboot >/dev/null 2>&1 ; then
73		rm -f ${IMAGE}
74		${MKIMAGE} -f ${ITS} -E -p ${OFFS} ${ITB}
75		for ((i = 0; i < ${COPIES}; i++));
76		do
77			cat ${ITB} >> ${IMAGE}
78			truncate -s %${ITB_KB}K ${IMAGE}
79		done
80	else
81		${MKIMAGE} -f ${ITS} -E -p ${OFFS} ${IMAGE}
82	fi
83
84	rm ${OUT} -rf
85	echo
86	echo "Image(repack):  ${IMAGE} is ready"
87}
88
89fit_repack $*
90
91