public inbox for openembedded-core@lists.openembedded.org
 help / color / mirror / Atom feed
From: Jonathan Liu <net147@gmail.com>
To: Darren Hart <dvhart@linux.intel.com>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH] boot-directdisk: mount root by MBR disk signature for Linux 3.8+
Date: Sat, 08 Jun 2013 23:03:17 +1000	[thread overview]
Message-ID: <51B32B95.4040806@gmail.com> (raw)
In-Reply-To: <51B26C98.1030002@linux.intel.com>

Hi Darren,

On 8/06/2013 9:28 AM, Darren Hart wrote:
> Hi Jon,
>
> Please include a complete commit message. For specifics on contributing
> patches, please see:
>
> https://wiki.yoctoproject.org/wiki/Contribution_Guidelines
>
> What is the problem? What is the cause? How are you addressing it? How
> was it tested?
>
> Is this 3.8 feature you are referring to something must be configured
> into the kernel? Or is it always present?
>
> There is also the concern with dual kernel systems (but that perhaps can
> wait until that is commonplace and the infrastructure is in place).
Ok.
> See inline for additional comments:
>
> On 05/22/2013 09:31 PM, Jonathan Liu wrote:
>> Signed-off-by: Jonathan Liu<net147@gmail.com>
>> ---
>>   meta/classes/boot-directdisk.bbclass | 21 ++++++++++++++++++---
>>   1 file changed, 18 insertions(+), 3 deletions(-)
>>
>> diff --git a/meta/classes/boot-directdisk.bbclass b/meta/classes/boot-directdisk.bbclass
>> index 3169043..736bee0 100644
>> --- a/meta/classes/boot-directdisk.bbclass
>> +++ b/meta/classes/boot-directdisk.bbclass
>> @@ -23,7 +23,8 @@ do_bootdirectdisk[depends] += "dosfstools-native:do_populate_sysroot \
>>                                  syslinux:do_populate_sysroot \
>>                                  syslinux-native:do_populate_sysroot \
>>                                  parted-native:do_populate_sysroot \
>> -                               mtools-native:do_populate_sysroot "
>> +                               mtools-native:do_populate_sysroot \
>> +                               util-linux-native:do_populate_sysroot "
>>   
>>   PACKAGES = " "
>>   EXCLUDE_FROM_WORLD = "1"
>> @@ -58,6 +59,22 @@ build_boot_dd() {
>>   	# done in blocks, thus the mod by 16 instead of 32.
>>   	BLOCKS=$(expr $BLOCKS + $(expr 16 - $(expr $BLOCKS % 16)))
>>   
>> +	KERNEL_VERSION=$(grep '^VERSION\s*=' ${STAGING_KERNEL_DIR}/Makefile | grep -o '[0-9]*$')
>> +	KERNEL_PATCHLEVEL=$(grep '^PATCHLEVEL\s*=' ${STAGING_KERNEL_DIR}/Makefile | grep -o '[0-9]*$')
> Could you use LINUX_VERSION here and void delving into the Linux sources
> directly?
It's not available in the context of the image recipe if I do bitbake -e 
core-image-minimal.
>> +
>> +	rm -rf $IMAGE
>> +	dd if=/dev/zero of=$IMAGE bs=512 seek=1 count=0
>> +	parted $IMAGE mklabel msdos
>> +
>> +	# If using Linux 3.8 or later, mount root by MBR disk signature
>> +	if [[ $KERNEL_VERSION -eq 3 && $KERNEL_PATCHLEVEL -ge 8 ]] || [ $KERNEL_VERSION -gt 3 ]; then
> [[ is a bashism, use portable tests please, for example:
>
> if ([ $KERNEL_VERSION -eq 3 ] && [$KERNEL_PATCHLEVEL -ge 8 ]) || [
> $KERNEL_VERSION -gt 3 ]; then
>
> This is easily tested by writing test.sh and executing with bash and
> dash and ensuring consistent behavior.
Ok.
> Is the version sufficient? No CONFIG_ value to test for?
It needs CONFIG_BLOCK so I will test for that.
>> +		# The disk signature generated by GNU Parted isn't really random, so regenerate it
>> +		echo -ne "$(uuidgen | sed 's/-//g;s/\(..\)/\\x&/g')" | dd of=$IMAGE bs=1 seek=440 count=4 conv=notrunc
>> +
>> +		DISK_SIGNATURE=$(hexdump -s 440 -n 4 -e '4 1 "%02x\n" "\n"' $IMAGE | tac | paste -sd '')
> Seems like it would be more efficient to just store this in a variable
> initially
> rather than opening, seeking, and dumping the value that you just wrote
> in...
Ok.
>> +		sed -i "s|\broot=[^ ]*|root=PARTUUID=$DISK_SIGNATURE-02|" $HDDDIR/syslinux.cfg
> In bootimg.bbclass I have been abstracting out the boot loader so it is
> not explicitly referenced. Something like that is in order here. For
> example, an EFI boot-directdisk (which admittedly doesn't exist yet)
> would not have a syslinux.cfg but would still need the change. Consider
> using the syslinux class to abstract this necessary change. Then I can
> add the gummiboot change when EFI support is added.
Do you mean adding a function to the syslinux class which updates root= 
in syslinux.cfg previously created by build_syslinux_cfg()?

> --
> Darren
>
>> +	fi
>> +
>>   	mkdosfs -n ${BOOTDD_VOLUME_ID} -S 512 -C $HDDIMG $BLOCKS
>>   	mcopy -i $HDDIMG -s $HDDDIR/* ::/
>>   
>> @@ -71,10 +88,8 @@ build_boot_dd() {
>>   	END3=`expr \( $ROOTFSBLOCKS \* 1024 \) + $END1`
>>   
>>   	echo $ROOTFSBLOCKS $TOTALSIZE $END1 $END2 $END3
>> -	rm -rf $IMAGE
>>   	dd if=/dev/zero of=$IMAGE bs=1024 seek=$TOTALSIZE count=1
>>   
>> -	parted $IMAGE mklabel msdos
>>   	parted $IMAGE mkpart primary fat16 0 ${END1}B
>>   	parted $IMAGE unit B mkpart primary ext2 ${END2}B ${END3}B
>>   	parted $IMAGE set 1 boot on
>>
Regards,
Jonathan


  reply	other threads:[~2013-06-08 13:08 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-23  4:31 [PATCH] boot-directdisk: mount root by MBR disk signature for Linux 3.8+ Jonathan Liu
2013-06-07 23:28 ` Darren Hart
2013-06-08 13:03   ` Jonathan Liu [this message]
2013-06-10 16:26     ` Darren Hart
2013-07-09 13:58       ` Jonathan Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51B32B95.4040806@gmail.com \
    --to=net147@gmail.com \
    --cc=dvhart@linux.intel.com \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox