xref: /rkbin/tools/burner_image_kits/make.sh (revision d9a210f4616d920fe0efc2472879505a8169d9ea)
14e66ef7fSJon Lin#!/bin/bash
24e66ef7fSJon Lin
34e66ef7fSJon LinDIR="$( cd "$( dirname "$0"  )" && pwd  )"
44e66ef7fSJon Linsrc_path=$1
54e66ef7fSJon Lindst_path=$2
64e66ef7fSJon Linsoc=$3
74e66ef7fSJon Linblock_size=$4
84e66ef7fSJon Linpage_size=$5
94e66ef7fSJon Linoob_size=$6
104e66ef7fSJon Linis_slc_nand=$7
114e66ef7fSJon Lin
12*d9a210f4SJon Lintemp_path=./IMAGES_T
134e66ef7fSJon Linddr=
144e66ef7fSJon Linspl=
154e66ef7fSJon Lin
164e66ef7fSJon Lintransfer_4K_2_2K=$DIR/tools/transfer_4K_2_2K.sh
174e66ef7fSJon Linrk_bch=$DIR/tools/rk_bch
184e66ef7fSJon Linmkimage=$DIR/../mkimage
194e66ef7fSJon Linupgrade_tool=$DIR/../upgrade_tool
204e66ef7fSJon Linalign_to_flash_block_size=$DIR/tools/align_to_flash_block_size.sh
214e66ef7fSJon Linboot_merger=$DIR/../boot_merger
224e66ef7fSJon Lin
234e66ef7fSJon Linfunction gen_idblock()
244e66ef7fSJon Lin{
254e66ef7fSJon Lin	$mkimage -n $soc -T rksd -d $1:$2 idblock1.img.temp > /dev/null
264e66ef7fSJon Lin	echo $3": gen_idblock: success!"
27a99428b7SJon Lin	if [[ $page_size == 4096 ]]; then
284e66ef7fSJon Lin		$transfer_4K_2_2K idblock1.img.temp $3
294e66ef7fSJon Lin		rm idblock1.img.temp
304e66ef7fSJon Lin	else
314e66ef7fSJon Lin		mv idblock1.img.temp $3
324e66ef7fSJon Lin	fi
334e66ef7fSJon Lin}
344e66ef7fSJon Lin
354e66ef7fSJon Linfunction is_miniloader_or_update_or_parameter()
364e66ef7fSJon Lin{
374e66ef7fSJon Lin	ret=0
384e66ef7fSJon Lin	ls $1 | grep "MiniLoaderAll.bin" > /dev/null
394e66ef7fSJon Lin	if [ $? -eq 0 ] ;then
40*d9a210f4SJon Lin		$boot_merger unpack --loader $1 --output $temp_path > /dev/null
41*d9a210f4SJon Lin		ddr=$temp_path"/"FlashData.bin
42*d9a210f4SJon Lin		spl=$temp_path"/"FlashBoot.bin
43*d9a210f4SJon Lin		gen_idblock $ddr $spl $temp_path"/"idblock.img
44*d9a210f4SJon Lin		is_img_and_gen_file_from_src_2_dst $temp_path"/"idblock.img idblock.img
4575f45d5eSJon Lin		cat $dst_path"/"idblock.img >> $dst_path"/"idblocks.img
4675f45d5eSJon Lin		cat $dst_path"/"idblock.img >> $dst_path"/"idblocks.img
4775f45d5eSJon Lin		cat $dst_path"/"idblock.img >> $dst_path"/"idblocks.img
4875f45d5eSJon Lin		mv $dst_path"/"idblock.img $dst_path"/"idblock.img.bak
494e66ef7fSJon Lin		ret=1
504e66ef7fSJon Lin	fi
514e66ef7fSJon Lin
524e66ef7fSJon Lin	ls $1 | grep "update" > /dev/null
534e66ef7fSJon Lin	if [ $? -eq 0 ] ;then
544e66ef7fSJon Lin		ret=1
554e66ef7fSJon Lin	fi
564e66ef7fSJon Lin
574e66ef7fSJon Lin	ls $1 | grep "parameter.txt" > /dev/null
584e66ef7fSJon Lin	if [ $? -eq 0 ] ;then
59*d9a210f4SJon Lin		$upgrade_tool gpt $1 $temp_path"/"gpt.img > /dev/null
60*d9a210f4SJon Lin		is_img_and_gen_file_from_src_2_dst $temp_path"/"gpt.img gpt.img
614e66ef7fSJon Lin		ret=1
624e66ef7fSJon Lin	fi
634e66ef7fSJon Lin
644e66ef7fSJon Lin	return $ret
654e66ef7fSJon Lin}
664e66ef7fSJon Lin
67554a3f27SJon Lin# source file absolute direction and name
68554a3f27SJon Lin# output name
694e66ef7fSJon Linfunction is_img_and_gen_file_from_src_2_dst()
704e66ef7fSJon Lin{
71554a3f27SJon Lin	ls $1 | grep "img" > /dev/null
724e66ef7fSJon Lin	if [ $? -eq 0 ] ;then
73554a3f27SJon Lin		$align_to_flash_block_size $1 $dst_path"/"$2 $block_size
744e66ef7fSJon Lin		if [ $is_slc_nand -eq 1 ] ;then
75554a3f27SJon Lin			$rk_bch $dst_path"/"$2 $dst_path"/"$2".bch" $page_size $oob_size 0
76554a3f27SJon Lin			mv  $dst_path"/"$2".bch" $dst_path"/"$2
77554a3f27SJon Lin			echo "$1: rk_bch: success!"
784e66ef7fSJon Lin		fi
794e66ef7fSJon Lin	fi
804e66ef7fSJon Lin}
814e66ef7fSJon Lin
824e66ef7fSJon Linif [ -f "$src_path" ]; then
834e66ef7fSJon Lin	echo "input error, $src_path is a file!"
844e66ef7fSJon Lin	exit
854e66ef7fSJon Linfi
864e66ef7fSJon Lin
874e66ef7fSJon Linif [ ! -x "$src_path" ]; then
884e66ef7fSJon Lin	echo "input error, $src_path not exit!"
894e66ef7fSJon Lin	exit
904e66ef7fSJon Linfi
914e66ef7fSJon Lin
924e66ef7fSJon Linif [[ $is_slc_nand != 0 && $is_slc_nand != 1 ]]; then
934e66ef7fSJon Lin	echo "param is_slc_nand: $is_slc_nand not support!"
944e66ef7fSJon Lin	echo "support:"
954e66ef7fSJon Lin	echo "  1(for SLC Nand, 8 pins io)"
964e66ef7fSJon Lin	echo "  0(others)"
974e66ef7fSJon Lin	exit
984e66ef7fSJon Linfi
994e66ef7fSJon Lin
1004e66ef7fSJon Linif [ $is_slc_nand -eq 1 ] ;then
10162d28053SJon Lin	if [[ $oob_size != 64 && $oob_size != 128 && $oob_size != 224 && $oob_size != 256 ]]; then
1024e66ef7fSJon Lin	echo "param oob_size: $oob_size not support!"
1034e66ef7fSJon Lin	echo "support:"
1044e66ef7fSJon Lin	echo "  64(B)"
1054e66ef7fSJon Lin	echo "  128(B)"
10662d28053SJon Lin	echo "  224(B)"
1074e66ef7fSJon Lin	echo "  256(B)"
1084e66ef7fSJon Lin	exit
1094e66ef7fSJon Linfi
1104e66ef7fSJon Linfi
1114e66ef7fSJon Lin
1124e66ef7fSJon Linif [[ $page_size != 2048 && $page_size != 4096 ]]; then
1134e66ef7fSJon Lin	echo "param page_size: $page_size not support!"
1144e66ef7fSJon Lin	echo "support:"
1154e66ef7fSJon Lin	echo "  2048(B)"
1164e66ef7fSJon Lin	echo "  4096(B)"
1174e66ef7fSJon Lin	exit
1184e66ef7fSJon Linfi
1194e66ef7fSJon Lin
1204e66ef7fSJon Linif [[ $block_size != 128 && $block_size != 256 ]]; then
1214e66ef7fSJon Lin	echo "param block_size: $block_size not support!"
1224e66ef7fSJon Lin	echo "support:"
1234e66ef7fSJon Lin	echo "  128(KB)"
1244e66ef7fSJon Lin	echo "  256(KB)"
1254e66ef7fSJon Lin	exit
1264e66ef7fSJon Linfi
1274e66ef7fSJon Lin
1284e66ef7fSJon Linif [[ $soc != "rk3308" && $soc != "rv1126" ]]; then
1294e66ef7fSJon Lin	echo "param soc: $soc not support!"
1304e66ef7fSJon Lin	echo "support:"
1314e66ef7fSJon Lin	echo "  rk3308"
1324e66ef7fSJon Lin	echo "  rv1126"
1334e66ef7fSJon Lin	exit
1344e66ef7fSJon Linfi
1354e66ef7fSJon Lin
1364e66ef7fSJon Linif [ -x "$dst_path" ]; then
1374e66ef7fSJon Lin	rm -rf $dst_path
1384e66ef7fSJon Linfi
1394e66ef7fSJon Lin
140*d9a210f4SJon Linif [ -x "$temp_path" ]; then
141*d9a210f4SJon Lin	rm -rf $temp_path
142*d9a210f4SJon Linfi
143*d9a210f4SJon Linmkdir $temp_path
144*d9a210f4SJon Lin
1454e66ef7fSJon Lindst_path=$dst_path"/"$page_size"B_"$block_size"KB"
1464e66ef7fSJon Linif [[ $is_slc_nand == 1 ]]; then
1474e66ef7fSJon Lin	dst_path=$dst_path"_SLC"
1484e66ef7fSJon Linelse
1494e66ef7fSJon Lin	dst_path=$dst_path"_SPI"
1504e66ef7fSJon Linfi
1514e66ef7fSJon Linmkdir -p $dst_path
1524e66ef7fSJon Lin
1534e66ef7fSJon Linfor file in `ls -a $src_path`
1544e66ef7fSJon Lindo
1554e66ef7fSJon Lin	if [ -f $src_path"/"$file ] ;then
156554a3f27SJon Lin		a=$src_path"/"$file
157*d9a210f4SJon Lin		cp $a $temp_path"/"$file
158*d9a210f4SJon Lin		# get soft link address
159554a3f27SJon Lin		if [ -h $src_path"/"$file ]
160554a3f27SJon Lin		then
161554a3f27SJon Lin			a=$src_path"/"$file
162554a3f27SJon Lin			b=`ls -ld $a|awk '{print $NF}'`
163554a3f27SJon Lin			c=`ls -ld $a|awk '{print $(NF-2)}'`
164554a3f27SJon Lin			[[ $b =~ ^/ ]] && a=$b  || a=`dirname $c`/$b
165*d9a210f4SJon Lin			cp -f $a $temp_path"/"$file
166554a3f27SJon Lin		fi
167*d9a210f4SJon Lin		#get internal address
168*d9a210f4SJon Lin		filesize=`stat -c "%s" $a`
169*d9a210f4SJon Lin		if [[ $filesize -lt 256 ]]; then
170*d9a210f4SJon Lin			line=`sed -n '1p' $a`
171*d9a210f4SJon Lin			if [ -f $line ] ;then
172*d9a210f4SJon Lin				cp $line $temp_path"/"$file
173*d9a210f4SJon Lin			else
174*d9a210f4SJon Lin				echo "error: $file first line '$line' is not exit!"
175*d9a210f4SJon Lin			fi
176*d9a210f4SJon Lin		fi
177*d9a210f4SJon Lin		is_miniloader_or_update_or_parameter $temp_path"/"$file
1784e66ef7fSJon Lin		if [ $? -eq 0 ] ;then
179*d9a210f4SJon Lin			is_img_and_gen_file_from_src_2_dst $temp_path"/"$file $file
1804e66ef7fSJon Lin		fi
1814e66ef7fSJon Lin	fi
1824e66ef7fSJon Lindone
183*d9a210f4SJon Lin
184*d9a210f4SJon Linecho "rm -rf $temp_path"
185*d9a210f4SJon Linrm -rf $temp_path
186