#!/bin/bash IMAGE_DIR=. ORIGIN_FILE=$IMAGE_DIR/Boot.bin TARGET_FILE=$IMAGE_DIR/SpiFlash.bin PAD_DUMMY_SIZE=4096 PAD_DUMMY_BIN=$IMAGE_DIR/dummy.bin PADDED_SIZE_ALIGN=4096 PADDED_BIN=$IMAGE_DIR/padded.bin function func_generate_dummy_file() #创建一个4K的临时文件 { #echo "create dummy file:$PAD_DUMMY_BIN, file size : $PAD_DUMMY_SIZE" tr '\000' '\377' < /dev/zero | dd of=$PAD_DUMMY_BIN bs=$PAD_DUMMY_SIZE count=1 } function func_generate_padded_file() #创建一个指定size的临时文件 { padsize=$1 tr '\000' '\377' < /dev/zero | dd of=$PADDED_BIN bs=$padsize count=1 } function func_pad_dummy_size() #创建相应镜像大小的空文件 { padname=$1 padsize=$2 padsize=${padsize:=0} #若为空则赋值为0 while [[ $padsize -gt "$PAD_DUMMY_SIZE" ]] #大于 do cat $PAD_DUMMY_BIN >> $padname padsize=$(($padsize-$PAD_DUMMY_SIZE)) done if [ $padsize != 0 ]; then func_generate_padded_file $padsize cat $PADDED_BIN >> $padname rm $PADDED_BIN fi } function func_merge_bin_file() { filename=$1 mergesize=$2 mergesize=${mergesize:=0} echo "merge file:$filename,merge size:$mergesize" filesize=$(stat -c%s $filename) if [[ $mergesize -ge "$filesize" ]]; then padsize=$(($mergesize-$filesize)) else padsize=$(($filesize-($filesize&~($PADDED_SIZE_ALIGN-1)))) padsize=$(($PADDED_SIZE_ALIGN-$padsize)) fi echo "filesize:$filesize, padsize:$padsize" cat "$filename" >> $TARGET_FILE func_pad_dummy_size $TARGET_FILE $padsize } if [ -f "$TARGET_FILE" ]; then rm $TARGET_FILE fi func_generate_dummy_file func_merge_bin_file boot.bin 0x60000; func_merge_bin_file kernel 0x200000; #KEY_CUST:0x10000 #func_pad_dummy_size $TARGET_FILE 0x10000; func_merge_bin_file logo 0x20000; func_merge_bin_file rootfs.sqfs 0x1C0000; func_merge_bin_file miservice.sqfs 0x370000; func_merge_bin_file customer.sqfs 0x770000; func_merge_bin_file appconfigs.jffs2 0xD0000; rm $PAD_DUMMY_BIN