5 function write_to_4bytes_binary()
7 HEX=`echo "obase=16; $1" | bc`
16 for str in $(echo $HEX | sed 's/../& /g' | rev); do
17 str=$(echo -en $str | rev)
22 function write_to_padding_binary()
26 PAD_SIZE=$(($(($PAD - $(($1 % $PAD)))) % $PAD))
27 if [ $PAD_SIZE -gt 0 ]; then
28 dd if=/dev/zero of=./padding bs=1 count=$PAD_SIZE 2>/dev/zero
33 echo -en " | PAD: $PAD_SIZE[B]\n"
37 echo "sprd_mkdzimage.sh [OPTIONS] -o <output file> -k <kernel file>"
39 echo " --output-file/-o output file"
40 echo " --kernel/-k kernel file"
41 echo " --devicetree/-d devicetree file"
42 echo " --help/-h this help screen"
50 OUT_DIR="./arch/arm/boot"
52 MAGIC="NZIT" # 0x54495A4E
53 KERNEL_ADDR=32768 # 0x00008000
54 ATAGS_ADDR=31457280 # 0x01e00000
59 if [ "$#" -eq "0" ]; then
65 params="$(getopt -o o:k:d:h -l output-file:,:kernel:,devicetree:,help --name "$0" -- "$@")"
73 OUT_DIR=`dirname $OUTPUT_FILE`
74 if [ ! -d "$OUT_DIR" ]; then
75 echo "invalid output path '$OUT_DIR'."
78 OUT=${OUTPUT_FILE#${OUT_DIR}}
103 if [ "z${KERNEL}" == "z" ] || [ "z${DEVICETREE}" == "z" ]; then
107 if [ ! -e "${KERNEL}" ]; then
108 echo -en "kernel '${KERNEL}' not found.\nexit\n"
112 if [ ! -e "${DEVICETREE}" ]; then
113 echo -en "devicetree '${DEVICETREE}' not found.\nexit\n"
126 echo -en "$HEADER_SIZE[B]\n"
128 echo -en $MAGIC > $OUT
130 write_to_4bytes_binary $KERNEL_ADDR $OUT
134 SIZE=`du -b $FILE | awk '{print $1}'`
135 write_to_4bytes_binary $SIZE $OUT
138 DTB_ADDR=$(($KERNEL_ADDR + $SIZE))
139 write_to_4bytes_binary $DTB_ADDR $OUT
143 SIZE=`du -b $FILE | awk '{print $1}'`
144 write_to_4bytes_binary $SIZE $OUT
147 write_to_4bytes_binary $ATAGS_ADDR $OUT
149 write_to_4bytes_binary $PAD $OUT
152 write_to_padding_binary $HEADER_SIZE
153 cat $OUT_TMP padding > $OUT
158 FILE_PATH=`dirname ${KERNEL}`
159 FILE_NAME=${FILE#${FILE_PATH}}
160 FILE_NAME=${FILE_NAME//\//}
162 echo -en " *${FILE_NAME} "
163 cat $OUT $FILE > $OUT_TMP
165 SIZE=`du -b $FILE | awk '{print $1}'`
166 echo -en "$SIZE[B]\n"
168 write_to_padding_binary $SIZE
169 cat $OUT_TMP padding > $OUT
174 FILE_PATH=`dirname ${DEVICETREE}`
175 FILE_NAME=${FILE#${FILE_PATH}}
176 FILE_NAME=${FILE_NAME//\//}
178 echo -en " *${FILE_NAME} "
179 cat $OUT $FILE > $OUT_TMP
181 SIZE=`du -b $FILE | awk '{print $1}'`
182 echo -en "$SIZE[B]\n"
184 write_to_padding_binary $SIZE
185 cat $OUT_TMP padding > $OUT
194 S=`du -b $OUT_DIR/$OUT | awk '{print $1}'`
196 echo -en "## OUT: $OUT size: $S[B]; $S_K[KB]\n"