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