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