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