xref: /OK3568_Linux_fs/rkbin/tools/burner_image_kits/make.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun
3*4882a593SmuzhiyunDIR="$( cd "$( dirname "$0"  )" && pwd  )"
4*4882a593Smuzhiyunsrc_path=$1
5*4882a593Smuzhiyundst_path=$2
6*4882a593Smuzhiyunsoc=$3
7*4882a593Smuzhiyunblock_size=$4
8*4882a593Smuzhiyunpage_size=$5
9*4882a593Smuzhiyunoob_size=$6
10*4882a593Smuzhiyunis_slc_nand=$7
11*4882a593Smuzhiyun
12*4882a593Smuzhiyuntemp_path=./IMAGES_T
13*4882a593Smuzhiyunddr=
14*4882a593Smuzhiyunspl=
15*4882a593Smuzhiyun
16*4882a593Smuzhiyuntransfer_4K_2_2K=$DIR/tools/transfer_4K_2_2K.sh
17*4882a593Smuzhiyunrk_bch=$DIR/tools/rk_bch
18*4882a593Smuzhiyunmkimage=$DIR/../mkimage
19*4882a593Smuzhiyunupgrade_tool=$DIR/../upgrade_tool
20*4882a593Smuzhiyunalign_to_flash_block_size=$DIR/tools/align_to_flash_block_size.sh
21*4882a593Smuzhiyunboot_merger=$DIR/../boot_merger
22*4882a593Smuzhiyun
23*4882a593Smuzhiyunfunction gen_idblock()
24*4882a593Smuzhiyun{
25*4882a593Smuzhiyun	$mkimage -n $soc -T rksd -d $1:$2 idblock1.img.temp > /dev/null
26*4882a593Smuzhiyun	echo $3": gen_idblock: success!"
27*4882a593Smuzhiyun	if [[ $page_size == 4096 ]]; then
28*4882a593Smuzhiyun		$transfer_4K_2_2K idblock1.img.temp $3
29*4882a593Smuzhiyun		rm idblock1.img.temp
30*4882a593Smuzhiyun	else
31*4882a593Smuzhiyun		mv idblock1.img.temp $3
32*4882a593Smuzhiyun	fi
33*4882a593Smuzhiyun}
34*4882a593Smuzhiyun
35*4882a593Smuzhiyunfunction is_miniloader_or_update_or_parameter()
36*4882a593Smuzhiyun{
37*4882a593Smuzhiyun	ret=0
38*4882a593Smuzhiyun	ls $1 | grep "MiniLoaderAll.bin" > /dev/null
39*4882a593Smuzhiyun	if [ $? -eq 0 ] ;then
40*4882a593Smuzhiyun		$boot_merger unpack --loader $1 --output $temp_path > /dev/null
41*4882a593Smuzhiyun		ddr=$temp_path"/"FlashData.bin
42*4882a593Smuzhiyun		spl=$temp_path"/"FlashBoot.bin
43*4882a593Smuzhiyun		gen_idblock $ddr $spl $temp_path"/"idblock.img
44*4882a593Smuzhiyun		is_img_and_gen_file_from_src_2_dst $temp_path"/"idblock.img idblock.img
45*4882a593Smuzhiyun		cat $dst_path"/"idblock.img >> $dst_path"/"idblocks.img
46*4882a593Smuzhiyun		cat $dst_path"/"idblock.img >> $dst_path"/"idblocks.img
47*4882a593Smuzhiyun		cat $dst_path"/"idblock.img >> $dst_path"/"idblocks.img
48*4882a593Smuzhiyun		mv $dst_path"/"idblock.img $dst_path"/"idblock.img.bak
49*4882a593Smuzhiyun		ret=1
50*4882a593Smuzhiyun	fi
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun	ls $1 | grep "update" > /dev/null
53*4882a593Smuzhiyun	if [ $? -eq 0 ] ;then
54*4882a593Smuzhiyun		ret=1
55*4882a593Smuzhiyun	fi
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun	ls $1 | grep "parameter.txt" > /dev/null
58*4882a593Smuzhiyun	if [ $? -eq 0 ] ;then
59*4882a593Smuzhiyun		$upgrade_tool gpt $1 $temp_path"/"gpt.img > /dev/null
60*4882a593Smuzhiyun		is_img_and_gen_file_from_src_2_dst $temp_path"/"gpt.img gpt.img
61*4882a593Smuzhiyun		ret=1
62*4882a593Smuzhiyun	fi
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun	return $ret
65*4882a593Smuzhiyun}
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun# source file absolute direction and name
68*4882a593Smuzhiyun# output name
69*4882a593Smuzhiyunfunction is_img_and_gen_file_from_src_2_dst()
70*4882a593Smuzhiyun{
71*4882a593Smuzhiyun	ls $1 | grep "img" > /dev/null
72*4882a593Smuzhiyun	if [ $? -eq 0 ] ;then
73*4882a593Smuzhiyun		$align_to_flash_block_size $1 $dst_path"/"$2 $block_size
74*4882a593Smuzhiyun		if [ $is_slc_nand -eq 1 ] ;then
75*4882a593Smuzhiyun			$rk_bch $dst_path"/"$2 $dst_path"/"$2".bch" $page_size $oob_size 0
76*4882a593Smuzhiyun			mv  $dst_path"/"$2".bch" $dst_path"/"$2
77*4882a593Smuzhiyun			echo "$1: rk_bch: success!"
78*4882a593Smuzhiyun		fi
79*4882a593Smuzhiyun	fi
80*4882a593Smuzhiyun}
81*4882a593Smuzhiyun
82*4882a593Smuzhiyunif [ -f "$src_path" ]; then
83*4882a593Smuzhiyun	echo "input error, $src_path is a file!"
84*4882a593Smuzhiyun	exit
85*4882a593Smuzhiyunfi
86*4882a593Smuzhiyun
87*4882a593Smuzhiyunif [ ! -x "$src_path" ]; then
88*4882a593Smuzhiyun	echo "input error, $src_path not exit!"
89*4882a593Smuzhiyun	exit
90*4882a593Smuzhiyunfi
91*4882a593Smuzhiyun
92*4882a593Smuzhiyunif [[ $is_slc_nand != 0 && $is_slc_nand != 1 ]]; then
93*4882a593Smuzhiyun	echo "param is_slc_nand: $is_slc_nand not support!"
94*4882a593Smuzhiyun	echo "support:"
95*4882a593Smuzhiyun	echo "  1(for SLC Nand, 8 pins io)"
96*4882a593Smuzhiyun	echo "  0(others)"
97*4882a593Smuzhiyun	exit
98*4882a593Smuzhiyunfi
99*4882a593Smuzhiyun
100*4882a593Smuzhiyunif [ $is_slc_nand -eq 1 ] ;then
101*4882a593Smuzhiyun	if [[ $oob_size != 64 && $oob_size != 128 && $oob_size != 224 && $oob_size != 256 ]]; then
102*4882a593Smuzhiyun	echo "param oob_size: $oob_size not support!"
103*4882a593Smuzhiyun	echo "support:"
104*4882a593Smuzhiyun	echo "  64(B)"
105*4882a593Smuzhiyun	echo "  128(B)"
106*4882a593Smuzhiyun	echo "  224(B)"
107*4882a593Smuzhiyun	echo "  256(B)"
108*4882a593Smuzhiyun	exit
109*4882a593Smuzhiyunfi
110*4882a593Smuzhiyunfi
111*4882a593Smuzhiyun
112*4882a593Smuzhiyunif [[ $page_size != 2048 && $page_size != 4096 ]]; then
113*4882a593Smuzhiyun	echo "param page_size: $page_size not support!"
114*4882a593Smuzhiyun	echo "support:"
115*4882a593Smuzhiyun	echo "  2048(B)"
116*4882a593Smuzhiyun	echo "  4096(B)"
117*4882a593Smuzhiyun	exit
118*4882a593Smuzhiyunfi
119*4882a593Smuzhiyun
120*4882a593Smuzhiyunif [[ $block_size != 128 && $block_size != 256 ]]; then
121*4882a593Smuzhiyun	echo "param block_size: $block_size not support!"
122*4882a593Smuzhiyun	echo "support:"
123*4882a593Smuzhiyun	echo "  128(KB)"
124*4882a593Smuzhiyun	echo "  256(KB)"
125*4882a593Smuzhiyun	exit
126*4882a593Smuzhiyunfi
127*4882a593Smuzhiyun
128*4882a593Smuzhiyunif [[ $soc != "rk3308" && $soc != "rv1126" ]]; then
129*4882a593Smuzhiyun	echo "param soc: $soc not support!"
130*4882a593Smuzhiyun	echo "support:"
131*4882a593Smuzhiyun	echo "  rk3308"
132*4882a593Smuzhiyun	echo "  rv1126"
133*4882a593Smuzhiyun	exit
134*4882a593Smuzhiyunfi
135*4882a593Smuzhiyun
136*4882a593Smuzhiyunif [ -x "$dst_path" ]; then
137*4882a593Smuzhiyun	rm -rf $dst_path
138*4882a593Smuzhiyunfi
139*4882a593Smuzhiyun
140*4882a593Smuzhiyunif [ -x "$temp_path" ]; then
141*4882a593Smuzhiyun	rm -rf $temp_path
142*4882a593Smuzhiyunfi
143*4882a593Smuzhiyunmkdir $temp_path
144*4882a593Smuzhiyun
145*4882a593Smuzhiyundst_path=$dst_path"/"$page_size"B_"$block_size"KB"
146*4882a593Smuzhiyunif [[ $is_slc_nand == 1 ]]; then
147*4882a593Smuzhiyun	dst_path=$dst_path"_SLC"
148*4882a593Smuzhiyunelse
149*4882a593Smuzhiyun	dst_path=$dst_path"_SPI"
150*4882a593Smuzhiyunfi
151*4882a593Smuzhiyunmkdir -p $dst_path
152*4882a593Smuzhiyun
153*4882a593Smuzhiyunfor file in `ls -a $src_path`
154*4882a593Smuzhiyundo
155*4882a593Smuzhiyun	if [ -f $src_path"/"$file ] ;then
156*4882a593Smuzhiyun		a=$src_path"/"$file
157*4882a593Smuzhiyun		cp $a $temp_path"/"$file
158*4882a593Smuzhiyun		# get soft link address
159*4882a593Smuzhiyun		if [ -h $src_path"/"$file ]
160*4882a593Smuzhiyun		then
161*4882a593Smuzhiyun			a=$src_path"/"$file
162*4882a593Smuzhiyun			b=`ls -ld $a|awk '{print $NF}'`
163*4882a593Smuzhiyun			c=`ls -ld $a|awk '{print $(NF-2)}'`
164*4882a593Smuzhiyun			[[ $b =~ ^/ ]] && a=$b  || a=`dirname $c`/$b
165*4882a593Smuzhiyun			cp -f $a $temp_path"/"$file
166*4882a593Smuzhiyun		fi
167*4882a593Smuzhiyun		#get internal address
168*4882a593Smuzhiyun		filesize=`stat -c "%s" $a`
169*4882a593Smuzhiyun		if [[ $filesize -lt 256 ]]; then
170*4882a593Smuzhiyun			line=`sed -n '1p' $a`
171*4882a593Smuzhiyun			if [ -f $line ] ;then
172*4882a593Smuzhiyun				cp $line $temp_path"/"$file
173*4882a593Smuzhiyun			else
174*4882a593Smuzhiyun				echo "error: $file first line '$line' is not exit!"
175*4882a593Smuzhiyun			fi
176*4882a593Smuzhiyun		fi
177*4882a593Smuzhiyun		is_miniloader_or_update_or_parameter $temp_path"/"$file
178*4882a593Smuzhiyun		if [ $? -eq 0 ] ;then
179*4882a593Smuzhiyun			is_img_and_gen_file_from_src_2_dst $temp_path"/"$file $file
180*4882a593Smuzhiyun		fi
181*4882a593Smuzhiyun	fi
182*4882a593Smuzhiyundone
183*4882a593Smuzhiyun
184*4882a593Smuzhiyunecho "rm -rf $temp_path"
185*4882a593Smuzhiyunrm -rf $temp_path
186