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