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