You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.1 KiB
48 lines
1.1 KiB
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
if [ "$#" -ne 1 ]; then
|
|
echo "$0 path-to-system.img | path-to-vendor.img" >&2
|
|
exit 1
|
|
fi
|
|
|
|
srcimg=$1
|
|
if [[ ! -f "$srcimg" ]]; then
|
|
echo "$0: '${srcimg}' does not exist"
|
|
exit 1
|
|
fi
|
|
|
|
base_srcimg=`basename $srcimg`
|
|
label="${base_srcimg%.*}"
|
|
dir_name=$(dirname $srcimg)
|
|
target=${dir_name}/$label-qemu.img
|
|
|
|
#check if $srcimg is sparse
|
|
magic="3aff26ed"
|
|
src_magic=`xxd -p -l 4 $srcimg`
|
|
|
|
if [[ $src_magic == $magic ]]; then
|
|
echo "Unsparsing ${srcimg}"
|
|
tmpfile=$(mktemp -t unsparse_image.XXXXXX)
|
|
${SIMG2IMG:-simg2img} $srcimg $tmpfile > /dev/null 2>&1
|
|
srcimg="$tmpfile"
|
|
fi
|
|
|
|
dd if=/dev/zero of=$target ibs=1024k count=1 > /dev/null 2>&1
|
|
dd if=$srcimg of=$target conv=notrunc,sync ibs=1024k obs=1024k seek=1 > /dev/null 2>&1
|
|
unamestr=`uname`
|
|
curdisksize=$(stat -c %s $target)
|
|
|
|
dd if=/dev/zero of=$target conv=notrunc bs=1 count=1024k seek=$curdisksize > /dev/null 2>&1
|
|
|
|
disksize=`expr $curdisksize + 1024 \* 1024 `
|
|
|
|
end=`expr $disksize \/ 512 - 2048 - 1`
|
|
${SGDISK:-sgdisk} --clear $target > /dev/null 2>&1
|
|
${SGDISK:-sgdisk} --new=1:2048:$end --type=1:8300 --change-name=1:$label $target > /dev/null 2>&1
|
|
|
|
if [[ -e $tmpfile ]]; then
|
|
rm $tmpfile
|
|
fi
|