hc
2024-11-15 a46a1ad097419aeea7350987dd95230f50d90392
commit | author | age
a07526 1 #!/bin/bash
H 2
3 storage=$1
4 file_name=$2
5 idb_num=$3
6
7 function 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
24 function 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
43 function 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 }
68 function 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
98 prepare
99 main