From aedb3ea05c7ec98020c9f3202b3a6a674eeb3aec Mon Sep 17 00:00:00 2001 From: Juan RP Date: Sun, 26 Jan 2014 20:32:54 +0100 Subject: mkimage: use conv=sparse if dd supports it; added -p to set platform. --- mkimage.sh.in | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) (limited to 'mkimage.sh.in') diff --git a/mkimage.sh.in b/mkimage.sh.in index c90d75f..a69e93e 100644 --- a/mkimage.sh.in +++ b/mkimage.sh.in @@ -56,9 +56,10 @@ usage() { echo " The argument expects a number (GB). If is not set, defaults to 2." echo echo "OPTIONS" - echo " -b Set /boot (defaults to fat32, 256MB)" + echo " -b Set /boot (defaults to FAT, 32MB)" echo " -o Set output ." - echo " -r Set / (defaults to ext4, 256MB - )" + echo " -r Set / (defaults to ext4, 32MB - )" + echo " -p Set platform type: cubieboard2, rpi, odroid-u2" echo echo " Resulting image will have 2 partitions, /boot and / of total ." exit 0 @@ -67,11 +68,12 @@ usage() { # # main() # -while getopts "b:o:r:hV" opt; do +while getopts "b:o:r:p:hV" opt; do case $opt in b) BOOT_FSTYPE="$OPTARG";; o) FILENAME="$OPTARG";; r) ROOT_FSTYPE="$OPTARG";; + p) PLATFORM="$OPTARG";; V) echo "$PROGNAME @@MKLIVE_VERSION@@"; exit 0;; h) usage;; esac @@ -106,14 +108,26 @@ if [ -z "$FILENAME" ]; then FILENAME="void-image-$(date +%Y%m%d).img" fi +case "$PLATFORM" in + cubieboard2|odroid-u2|rpi);; + *) die "Unknown platform or platform unset, set it with -p!" +esac + for f in parted partx losetup mount mkfs.${BOOT_FSTYPE} mkfs.${ROOT_FSTYPE}; do if ! which ${f} >/dev/null; then die "Cannot find ${f}, exiting." fi done +# dd conv=sparse support first appeared in coreutils-8.16, disable it in +# older versions. +DD_VERSION=$(dd --version|head -n1|awk '{print $3}') +case "$DD_VERSION" in + [8-9].1[6-9]*|[8-9].[2-9]*) DD_SPARSE="conv=sparse";; +esac + info_msg "Creating disk image ($IMGSIZE) ..." -dd if=/dev/zero of=$FILENAME bs=$IMGSIZE count=1 >/dev/null 2>&1 +dd if=/dev/zero of=$FILENAME bs=$IMGSIZE count=1 ${DD_SPARSE} >/dev/null 2>&1 info_msg "Creating disk image partitions/filesystems ..." parted $FILENAME mktable msdos @@ -121,8 +135,8 @@ if [ "$BOOT_FSTYPE" = "vfat" ]; then _btype="fat32" _args="-I" fi -parted $FILENAME mkpart primary ${_btype} 4096s 256M -parted $FILENAME mkpart primary ext2 256M 100% +parted $FILENAME mkpart primary ${_btype} 4096s 64M +parted $FILENAME mkpart primary ext2 64M 100% parted $FILENAME toggle 1 boot LOOPDEV=$(losetup --show --find $FILENAME) partx -a $LOOPDEV @@ -141,10 +155,16 @@ BOOT_UUID=$(blkid -o value -s UUID ${LOOPDEV}p1) ROOT_UUID=$(blkid -o value -s UUID ${LOOPDEV}p2) echo "UUID=$BOOT_UUID /boot $BOOT_FSTYPE defaults 0 0" >> ${ROOTFSDIR}/etc/fstab echo "UUID=$ROOT_UUID / $ROOT_FSTYPE defaults 0 1" >> ${ROOTFSDIR}/etc/fstab + if [ -s ${ROOTFSDIR}/boot/cmdline.txt ]; then sed -e "s,rootfstype=ext4,rootfstype=${ROOT_FSTYPE}," -i ${ROOTFSDIR}/boot/cmdline.txt fi +# For cubieboard we need to flash u-boot to the image. +if [ "$PLATFORM" = "cubieboard2" ]; then + dd if=${ROOTFSDIR}/boot/u-boot-sunxi-with-spl.bin of=${LOOPDEV} bs=1024 seek=8 >/dev/null 2>&1 +fi + umount ${ROOTFSDIR}/boot umount $ROOTFSDIR partx -d $LOOPDEV @@ -152,6 +172,6 @@ losetup -d $LOOPDEV rmdir $ROOTFSDIR chmod 644 $FILENAME -info_msg "Successfully created $FILENAME image." +info_msg "Successfully created $FILENAME ($PLATFORM) image." # vim: set ts=4 sw=4 et: -- cgit 1.4.1