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