xref: /rkbin/tools/burner_image_kits/multi_idb_pack.sh (revision a223914a390087abde891e6f11bbd9d42abe332b)
1*a223914aSXuhui Lin#!/bin/bash
2*a223914aSXuhui Lin
3*a223914aSXuhui Linstorage=$1
4*a223914aSXuhui Linfile_name=$2
5*a223914aSXuhui Linidb_num=$3
6*a223914aSXuhui Lin
7*a223914aSXuhui Linfunction gen_multi_idb()
8*a223914aSXuhui Lin{
9*a223914aSXuhui Lin	idb_align_kb=$1
10*a223914aSXuhui Lin	# remove suffix
11*a223914aSXuhui Lin	temp_name=`basename ${file_name} .img`
12*a223914aSXuhui Lin	platform_name=`basename ${temp_name} .bin`
13*a223914aSXuhui Lin	rm -f ${platform_name}_${storage}_${idb_align_kb}_x${idb_num}.img
14*a223914aSXuhui Lin	cp ${file_name} ./idblock_${idb_align_kb}.img
15*a223914aSXuhui Lin	truncate -s ${idb_align_kb} ./idblock_${storage}_${idb_align_kb}.img
16*a223914aSXuhui Lin	for ((i=0; i<${idb_num}; i++))
17*a223914aSXuhui Lin	do
18*a223914aSXuhui Lin		cat ./idblock_${storage}_${idb_align_kb}.img >> ${platform_name}_${storage}_${idb_align_kb}_x${idb_num}.img
19*a223914aSXuhui Lin	done
20*a223914aSXuhui Lin	echo "Successfully generate ${platform_name}_${storage}_${idb_align_kb}_x${idb_num}.img include ${idb_num} IDBs, each aligned with ${idb_align_kb}, used in ${storage}."
21*a223914aSXuhui Lin	rm -f ./idblock_${storage}_${idb_align_kb}.img
22*a223914aSXuhui Lin}
23*a223914aSXuhui Lin
24*a223914aSXuhui Linfunction help()
25*a223914aSXuhui Lin{
26*a223914aSXuhui Lin	echo "Usage:"
27*a223914aSXuhui Lin	echo "    ./multi_idb_pack.sh <storage> <IDB file> [IDB multi]"
28*a223914aSXuhui Lin	echo
29*a223914aSXuhui Lin	echo "    Mandory args:"
30*a223914aSXuhui Lin	echo "        storage: IDB files are stored in"
31*a223914aSXuhui Lin	echo "        IDB file: Original single copy of IDB file"
32*a223914aSXuhui Lin	echo
33*a223914aSXuhui Lin	echo "    Optional args:"
34*a223914aSXuhui Lin	echo "        IDB multi: The number of IDB copies that need to be packaged"
35*a223914aSXuhui Lin	echo
36*a223914aSXuhui Lin	echo "    Example:"
37*a223914aSXuhui Lin	echo "        ./multi_idb_pack.sh spi-nand rk3588_idblock.img 5"
38*a223914aSXuhui Lin	echo
39*a223914aSXuhui Lin	echo "    If there is no IDB multi, the default value in the script"
40*a223914aSXuhui Lin	echo "    will be used depending on storage."
41*a223914aSXuhui Lin}
42*a223914aSXuhui Lin
43*a223914aSXuhui Linfunction prepare()
44*a223914aSXuhui Lin{
45*a223914aSXuhui Lin	# enter help?
46*a223914aSXuhui Lin	if [[ ${storage} == *help ]] || [ "${storage}" == "-h" ] || [ "${storage}" == "--h" ]; then
47*a223914aSXuhui Lin		help
48*a223914aSXuhui Lin		exit 1
49*a223914aSXuhui Lin	fi
50*a223914aSXuhui Lin	# check args
51*a223914aSXuhui Lin	if [ -z "${file_name}" ]; then
52*a223914aSXuhui Lin		help
53*a223914aSXuhui Lin		exit 1
54*a223914aSXuhui Lin	fi
55*a223914aSXuhui Lin	# use default value if without IDB multi
56*a223914aSXuhui Lin	if [ -z "${idb_num}" ]; then
57*a223914aSXuhui Lin		echo "No specified IDB multi, use default value instead"
58*a223914aSXuhui Lin		# emmc
59*a223914aSXuhui Lin		if [ "${storage}" == "emmc" ] || [ "${storage}" == "EMMC" ]; then
60*a223914aSXuhui Lin			idb_num=5;
61*a223914aSXuhui Lin		# spi-nand & spi-nor
62*a223914aSXuhui Lin		elif [[ ${storage} == spi*nor ]] || [[ ${storage} == spi*nand ]] ||
63*a223914aSXuhui Lin		 	 [[ ${storage} == SPI*NOR ]] || [[ ${storage} == SPI*NAND ]]; then
64*a223914aSXuhui Lin			idb_num=2;
65*a223914aSXuhui Lin		fi
66*a223914aSXuhui Lin	fi
67*a223914aSXuhui Lin}
68*a223914aSXuhui Linfunction main()
69*a223914aSXuhui Lin{
70*a223914aSXuhui Lin	size=$(ls -lh ${file_name} | awk '{split($5,a,"K"); print a[1]}')
71*a223914aSXuhui Lin	# emmc
72*a223914aSXuhui Lin	if [ "${storage}" == "emmc" ] || [ "${storage}" == "EMMC" ]; then
73*a223914aSXuhui Lin		# check size
74*a223914aSXuhui Lin		if [ ${size} -gt 512 ]; then
75*a223914aSXuhui Lin			echo "ERROR: ${file_name} size is over max 512KB limit."
76*a223914aSXuhui Lin			exit 1
77*a223914aSXuhui Lin		fi
78*a223914aSXuhui Lin		gen_multi_idb 512K
79*a223914aSXuhui Lin	# spi-nand & spi-nor
80*a223914aSXuhui Lin	elif [[ ${storage} == spi*nor ]] || [[ ${storage} == spi*nand ]] ||
81*a223914aSXuhui Lin		 [[ ${storage} == SPI*NOR ]] || [[ ${storage} == SPI*NAND ]]; then
82*a223914aSXuhui Lin		if [ ${size} -le 128 ]; then
83*a223914aSXuhui Lin			gen_multi_idb 128K
84*a223914aSXuhui Lin			gen_multi_idb 256K
85*a223914aSXuhui Lin		# check size
86*a223914aSXuhui Lin		elif [ ${size} -le 256 ]; then
87*a223914aSXuhui Lin			gen_multi_idb 256K
88*a223914aSXuhui Lin		else
89*a223914aSXuhui Lin			echo "ERROR: ${file_name} size is over max 256KB limit."
90*a223914aSXuhui Lin			exit 1
91*a223914aSXuhui Lin		fi
92*a223914aSXuhui Lin	else
93*a223914aSXuhui Lin		help
94*a223914aSXuhui Lin		exit 1
95*a223914aSXuhui Lin	fi
96*a223914aSXuhui Lin}
97*a223914aSXuhui Lin
98*a223914aSXuhui Linprepare
99*a223914aSXuhui Linmain
100