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