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