diff --git a/target/linux/mvebu/image/gen_mvebu_sdcard_img.sh b/target/linux/mvebu/image/gen_mvebu_sdcard_img.sh index 8725a37861..1d874df95d 100755 --- a/target/linux/mvebu/image/gen_mvebu_sdcard_img.sh +++ b/target/linux/mvebu/image/gen_mvebu_sdcard_img.sh @@ -31,62 +31,27 @@ fi set -e # parameters -IMGSIZE=$1 -OUTFILE="$2" -BOOTLOADER="$3" - -# calculate number of partitions from argument list -NUMPARTS=$# -((NUMPARTS=(NUMPARTS-3)/3)) - -# find required applications -FDISK=$(env PATH="/usr/local/sbin:/usr/sbin:/sbin:$PATH" which fdisk) +IMGSIZE=$1; shift +OUTFILE="$1"; shift +BOOTLOADER="$1"; shift # generate image file printf "Creating $OUTFILE from /dev/zero: " dd if=/dev/zero of="$OUTFILE" bs=512 count=1 >/dev/null printf "Done\n" -# generate fdisk argument list -printf "Generating fdisk argument list: " -ARGSFILE=$(mktemp) - -# empty partition table -printf "o\n" >> $ARGSFILE - -# actual partitions -offset=2048 -for i in $(seq 1 1 $NUMPARTS); do - ((n=3+3*i-2)); type=$(eval echo \${$n}) - ((n=3+3*i-1)); size=$(eval echo \${$n}) - ((end=offset+size-1)) - - printf "n\np\n%i\n\n%i\n" $i $end >> $ARGSFILE - - # special case on first aprtition: fdisk wont ask which one - if [ $i -eq 1 ]; then - printf "t\n%s\n" $type >> $ARGSFILE - else - printf "t\n%i\n%s\n" $i $type >> $ARGSFILE - fi - - # add this partitions size to offset for next partition - ((offset=end+1)) +while [ "$#" -ge 3 ]; do + ptgen_args="$ptgen_args -p $(($2 / 2)) -S 0x$1" + parts="$parts$3 " + shift; shift; shift done -# write and exit -printf "w\n" >> $ARGSFILE - -printf "Done\n" +head=16 +sect=63 # create real partition table using fdisk printf "Creating partition table: " -cat $ARGSFILE | $FDISK "$OUTFILE" >/dev/null -printf "Done\n" - -# remove temporary files -printf "Cleaning up: " -rm -f $ARGSFILE +set `ptgen -o "$OUTFILE" -h $head -s $sect -l 1024 $ptgen_args` printf "Done\n" # install bootloader @@ -94,18 +59,15 @@ printf "Writing bootloader: " dd of="$OUTFILE" if="$BOOTLOADER" bs=512 seek=1 conv=notrunc 2>/dev/null printf "Done\n" -# write partition data - -# offset of first partition is 2048 -offset=2048 -for i in $(seq 1 1 $NUMPARTS); do - ((n=3+3*i-1)); size=$(eval echo \${$n}) - ((n=3+3*i)); img="$(eval echo \${$n})" +i=1 +while [ "$#" -ge 2 ]; do + img="${parts%% *}" + parts="${parts#* }" printf "Writing %s to partition %i: " "$img" $i - dd if="$img" of="$OUTFILE" bs=512 seek=$offset conv=notrunc 2>/dev/null + dd if="$img" of="$OUTFILE" bs=512 seek=$(($1 / 512)) conv=notrunc 2>/dev/null printf "Done\n" - # add this partitions size to offset for next partition - ((offset=offset+size)) + let i=i+1 + shift; shift done