Patchwork [Build,App,RFC,3/5] boot-directdisk: Fix Block Calcuation

login
register
mail settings
Submitter Saul Wold
Date March 26, 2012, 6:47 a.m.
Message ID <364f6a61d06cecb52e21639dc69f292a4b8a3591.1332744104.git.sgw@linux.intel.com>
Download mbox | patch
Permalink /patch/24503/
State Accepted
Commit 53ae1737611e10e7fef815e8fde9e22165aa1047
Headers show

Comments

Saul Wold - March 26, 2012, 6:47 a.m.
This also changes the timeout to be settable

The block calcuation was not correctly rounding, see comment

Thanks to Darren Hart for fixing this.

Cc: Darren Hart <dvhart@linux.intel.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
---
 meta/classes/boot-directdisk.bbclass |   19 +++++++++++++------
 1 files changed, 13 insertions(+), 6 deletions(-)
Darren Hart - March 26, 2012, 6:26 p.m.
On 03/25/2012 11:47 PM, Saul Wold wrote:
> This also changes the timeout to be settable
> 
> The block calcuation was not correctly rounding, see comment
> 
> Thanks to Darren Hart for fixing this.
> 
> Cc: Darren Hart <dvhart@linux.intel.com>

Thanks, but be sure to use the option to get that added to actual email
header :-)  That's "-c" for the send-pull-request script.

--
Darren

> Signed-off-by: Saul Wold <sgw@linux.intel.com>
> ---
>  meta/classes/boot-directdisk.bbclass |   19 +++++++++++++------
>  1 files changed, 13 insertions(+), 6 deletions(-)
> 
> diff --git a/meta/classes/boot-directdisk.bbclass b/meta/classes/boot-directdisk.bbclass
> index 893164f..e9e1ba3 100644
> --- a/meta/classes/boot-directdisk.bbclass
> +++ b/meta/classes/boot-directdisk.bbclass
> @@ -37,9 +37,8 @@ BOOTDD_EXTRA_SPACE ?= "16384"
>  # Get the build_syslinux_cfg() function from the syslinux class
>  
>  AUTO_SYSLINUXCFG = "1"
> -LABELS = "boot"
>  SYSLINUX_ROOT ?= "root=/dev/sda2"
> -SYSLINUX_TIMEOUT = "10" # 1 second
> +SYSLINUX_TIMEOUT ?= "10"
>  
>  SYSLINUXCFG  = "${HDDDIR}/syslinux.cfg"
>  SYSLINUXMENU = "${HDDDIR}/menu"
> @@ -55,15 +54,23 @@ build_boot_dd() {
>  	install -m 444 ${STAGING_LIBDIR}/syslinux/ldlinux.sys ${HDDDIR}/ldlinux.sys
>  
>  	BLOCKS=`du -bks ${HDDDIR} | cut -f 1`
> -	SIZE=`expr $BLOCKS + ${BOOTDD_EXTRA_SPACE}`
> +	BLOCKS=`expr $BLOCKS + ${BOOTDD_EXTRA_SPACE}`
> +
> +	# Ensure total sectors is an integral number of sectors per
> +	# track or mcopy will complain. Sectors are 512 bytes, and we
> +	# generate images with 32 sectors per track. This calculation is
> +	# done in blocks, thus the mod by 16 instead of 32.
> +	BLOCKS=$(expr $BLOCKS + $(expr 16 - $(expr $BLOCKS % 16)))
> +
> +	mkdosfs -n ${BOOTDD_VOLUME_ID} -S 512 -C ${HDDIMG} $BLOCKS 
> +	mcopy -i ${HDDIMG} -s ${HDDDIR}/* ::/
>  
> -	mkdosfs -n ${BOOTDD_VOLUME_ID} -d ${HDDDIR} -C ${HDDIMG} $SIZE 
>  	syslinux ${HDDIMG}
>  	chmod 644 ${HDDIMG}
>  
>  	ROOTFSBLOCKS=`du -Lbks ${ROOTFS} | cut -f 1`
> -	TOTALSIZE=`expr $SIZE + $ROOTFSBLOCKS`
> -	END1=`expr $SIZE \* 1024`
> +	TOTALSIZE=`expr $BLOCKS + $ROOTFSBLOCKS`
> +	END1=`expr $BLOCKS \* 1024`
>  	END2=`expr $END1 + 512`
>  	END3=`expr \( $ROOTFSBLOCKS \* 1024 \) + $END1`
>

Patch

diff --git a/meta/classes/boot-directdisk.bbclass b/meta/classes/boot-directdisk.bbclass
index 893164f..e9e1ba3 100644
--- a/meta/classes/boot-directdisk.bbclass
+++ b/meta/classes/boot-directdisk.bbclass
@@ -37,9 +37,8 @@  BOOTDD_EXTRA_SPACE ?= "16384"
 # Get the build_syslinux_cfg() function from the syslinux class
 
 AUTO_SYSLINUXCFG = "1"
-LABELS = "boot"
 SYSLINUX_ROOT ?= "root=/dev/sda2"
-SYSLINUX_TIMEOUT = "10" # 1 second
+SYSLINUX_TIMEOUT ?= "10"
 
 SYSLINUXCFG  = "${HDDDIR}/syslinux.cfg"
 SYSLINUXMENU = "${HDDDIR}/menu"
@@ -55,15 +54,23 @@  build_boot_dd() {
 	install -m 444 ${STAGING_LIBDIR}/syslinux/ldlinux.sys ${HDDDIR}/ldlinux.sys
 
 	BLOCKS=`du -bks ${HDDDIR} | cut -f 1`
-	SIZE=`expr $BLOCKS + ${BOOTDD_EXTRA_SPACE}`
+	BLOCKS=`expr $BLOCKS + ${BOOTDD_EXTRA_SPACE}`
+
+	# Ensure total sectors is an integral number of sectors per
+	# track or mcopy will complain. Sectors are 512 bytes, and we
+	# generate images with 32 sectors per track. This calculation is
+	# done in blocks, thus the mod by 16 instead of 32.
+	BLOCKS=$(expr $BLOCKS + $(expr 16 - $(expr $BLOCKS % 16)))
+
+	mkdosfs -n ${BOOTDD_VOLUME_ID} -S 512 -C ${HDDIMG} $BLOCKS 
+	mcopy -i ${HDDIMG} -s ${HDDDIR}/* ::/
 
-	mkdosfs -n ${BOOTDD_VOLUME_ID} -d ${HDDDIR} -C ${HDDIMG} $SIZE 
 	syslinux ${HDDIMG}
 	chmod 644 ${HDDIMG}
 
 	ROOTFSBLOCKS=`du -Lbks ${ROOTFS} | cut -f 1`
-	TOTALSIZE=`expr $SIZE + $ROOTFSBLOCKS`
-	END1=`expr $SIZE \* 1024`
+	TOTALSIZE=`expr $BLOCKS + $ROOTFSBLOCKS`
+	END1=`expr $BLOCKS \* 1024`
 	END2=`expr $END1 + 512`
 	END3=`expr \( $ROOTFSBLOCKS \* 1024 \) + $END1`