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