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 |