From: Andrei Gherzan <andrei@gherzan.ro>
To: Jan Schmidt <thaytan@noraisin.net>
Cc: yocto@yoctoproject.org
Subject: Re: [meta-raspberrypi][PATCH 3/3] sdcard-image: Use the size of the generated rootfs
Date: Sun, 27 Jan 2013 13:32:55 +0200 [thread overview]
Message-ID: <20130127113217.GB25275@gmail.com> (raw)
In-Reply-To: <51050cf0.a952420a.022b.5f25SMTPIN_ADDED_BROKEN@mx.google.com>
On Sun, Jan 27, 2013 at 10:17:57PM +1100, Jan Schmidt wrote:
> On Sun, 2013-01-27 at 00:47 +0200, Andrei Gherzan wrote:
> > On Sat, Jan 26, 2013 at 10:18:24PM +1100, Jan Schmidt wrote:
> > > When constructing the SD card image, the code was using
> > > the inherited ROOTFS_SIZE, which is the size of the
> > > rootfs contents. When building (for example) a compressed
> > > rootfs, this allocates a partition much larger than necessary.
> > >
> > > Instead, take the size of the generated rootfs file that is
> > > about to be written into the generated image.
> > >
> > > Also remove the extra ${IMAGE_ROOTFS_ALIGNMENT} padding at
> > > the end of the image, as it isn't needed now.
> > >
> > > Signed-off-by: Jan Schmidt <thaytan@noraisin.net>
> > > ---
> > > classes/sdcard_image-rpi.bbclass | 23 +++++++++++++----------
> > > 1 file changed, 13 insertions(+), 10 deletions(-)
> > >
> > > diff --git a/classes/sdcard_image-rpi.bbclass b/classes/sdcard_image-rpi.bbclass
> > > index 421f561..fdac3b2 100644
> > > --- a/classes/sdcard_image-rpi.bbclass
> > > +++ b/classes/sdcard_image-rpi.bbclass
> > > @@ -13,14 +13,16 @@ inherit image_types
> > > # Default Free space = 1.3x
> > > # Use IMAGE_OVERHEAD_FACTOR to add more space
> > > # <--------->
> > > -# 4KiB 20MiB SDIMG_ROOTFS
> > > +# 4KiB ~20MiB SDIMG_ROOTFS
> >
> > Why ~20M? As you see in the class BOOT_SPACE ?= "20480". So that is 20MiB.
>
> I was trying to make it clear in the comment that if the user changes
> the BOOT_SPACE size, it will always be rounded up to the nearest 4MB. I
> couldn't think of a great way. Also, I didn't pay enough attention - the
> comment is saying IMAGE_ROOTFS_ALIGNMENT is 4kB, but it should be MiB.
>
Uh, I understand now your point here. Well, I don't think that user needs to
know that if he wants 20470 as BOOT_SPACE, he's partition will end up 20480.
Because this is something related to performance and it's in his benefit after
all. So let's drop this for now.
About the 4kB thing - yes. Needs fix.
> > > # <-----------------------> <----------> <---------------------->
> > > -# ------------------------ ------------ ------------------------ -------------------------------
> > > -# | IMAGE_ROOTFS_ALIGNMENT | BOOT_SPACE | ROOTFS_SIZE | IMAGE_ROOTFS_ALIGNMENT |
> > > -# ------------------------ ------------ ------------------------ -------------------------------
> > > -# ^ ^ ^ ^ ^
> > > -# | | | | |
> > > -# 0 4096 4KiB + 20MiB 4KiB + 20Mib + SDIMG_ROOTFS 4KiB + 20MiB + SDIMG_ROOTFS + 4KiB
> > > +# ------------------------ ------------ ------------------------
> > > +# | IMAGE_ROOTFS_ALIGNMENT | BOOT_SPACE | ROOTFS_SIZE |
> > > +# ------------------------ ------------ ------------------------
> > > +# ^ ^ ^ ^
> > > +# | | | |
> > > +# 0 4096 4KiB + ~20MiB 4KiB + ~20Mib + SDIMG_ROOTFS
> > > +# rounded up to
> > > +# IMAGE_ROOTFS_ALIGNMENT
> > >
> > >
> > > # Set kernel and boot loader
> > > @@ -29,7 +31,7 @@ IMAGE_BOOTLOADER ?= "bcm2835-bootfiles"
> > > # Boot partition volume id
> > > BOOTDD_VOLUME_ID ?= "${MACHINE}"
> > >
> > > -# Boot partition size [in KiB]
> > > +# Boot partition size [in KiB] (will be rounded up to IMAGE_ROOTFS_ALIGNMENT)
> > > BOOT_SPACE ?= "20480"
> > >
> > > # Set alignment to 4MB [in KiB]
> > > @@ -60,7 +62,8 @@ IMAGE_CMD_rpi-sdimg () {
> > > # Align partitions
> > > BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE} + ${IMAGE_ROOTFS_ALIGNMENT} - 1)
> > > BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE_ALIGNED} - ${BOOT_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT})
> > > - SDIMG_SIZE=$(expr ${IMAGE_ROOTFS_ALIGNMENT} + ${BOOT_SPACE_ALIGNED} + $ROOTFS_SIZE + ${IMAGE_ROOTFS_ALIGNMENT})
> > > + ROOTFS_SIZE=`du -ks ${SDIMG_ROOTFS} | awk '{print $1}'`
> >
> > Are you sure `du -ks ${ROOTFS_SIZE} | awk '{print $1}'` is aligned to
> > IMAGE_ROOTFS_ALIGNMENT? I'm not so sure about this. So you might need to align
> > it the way BOOT_SPACE is aligned.
>
> No, the ROOTFS_SIZE will be whatever the base recipe creates. I don't
> think it will have any particular alignment, except by accident - in the
> sense that it's probably stored on an ext3 filesystem that has 4kB
> allocation blocks and therefore 'du -sk' will round it up to that. We
> would need to explicitly round up to 4MiB, but I'm not sure why to do
> that -
>
Check this out:
http://android.bytearrays.com/android/what-means-sd-card-alignment/
> > > + SDIMG_SIZE=$(expr ${IMAGE_ROOTFS_ALIGNMENT} + ${BOOT_SPACE_ALIGNED} + ${ROOTFS_SIZE})
> > >
> > > # Initialize sdcard image file
> > > dd if=/dev/zero of=${SDIMG} bs=1 count=0 seek=$(expr 1024 \* ${SDIMG_SIZE})
> > > @@ -71,7 +74,7 @@ IMAGE_CMD_rpi-sdimg () {
> > > parted -s ${SDIMG} unit KiB mkpart primary fat32 ${IMAGE_ROOTFS_ALIGNMENT} $(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT})
> > > parted -s ${SDIMG} set 1 boot on
> > > # Create rootfs partition
> > > - parted -s ${SDIMG} unit KiB mkpart primary ext2 $(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT}) $(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT} \+ ${ROOTFS_SIZE})
> > > + parted -s ${SDIMG} unit KiB mkpart primary ext2 $(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT}) $(expr ${SDIMG_SIZE} - 1)
> > > parted ${SDIMG} print
> >
> > Don't think that -1 is needed here.
>
> No, you're right - it shouldn't be. I got a weird error where parted
> failed to create the partition in the image file, saying it ran past the
> end. Possibly related to the error you mentioned you saw that made you
> pad with IMAGE_ROOTFS_ALIGNMENT in the first place. I think I'll
> investigate more.
>
> There's a couple of things to check and fix here, so I think I'll
> withdraw this patch and re-send it later after more testing. The first 2
> patches still should be OK though.
>
Please do. Btw, after a smoke test the boot process failed with your
modifications:
[ 2.274940] mmcblk0: mmc0:b368 SMI 3.84 GiB
[ 2.281131] mmcblk0: p1 p2
[ 2.304604] EXT4-fs (mmcblk0p2): feature flags set on rev 0 fs, running
e2fsck is recommended
[ 2.313147] EXT4-fs (mmcblk0p2): bad geometry: block count 57344 exceeds
size of device (45539 blocks)
[ 2.323630] List of all partitions:
[ 2.327160] b300 4027392 mmcblk0 driver: mmcblk
[ 2.332487] b301 20480 mmcblk0p1
00000000-0000-0000-0000-000000000000
[ 2.340085] b302 45539 mmcblk0p2
00000000-0000-0000-0000-000000000000
[ 2.347592] No filesystem could mount root, tried: ext4
[ 2.352910] Kernel panic - not syncing: VFS: Unable to mount root fs on
unknown-block(179,2)
[ 2.361384] [<c0013b98>] (unwind_backtrace+0x0/0xf0) from [<c0398cb8>]
(panic+0x90/0x1dc)
[ 2.369575] [<c0398cb8>] (panic+0x90/0x1dc) from [<c04ebcb4>]
(mount_block_root+0x1f0/0x250)
[ 2.378011] [<c04ebcb4>] (mount_block_root+0x1f0/0x250) from [<c04ebf28>]
(mount_root+0xf0/0x118)
[ 2.386879] [<c04ebf28>] (mount_root+0xf0/0x118) from [<c04ec0a4>]
(prepare_namespace+0x154/0x1b4)
[ 2.395833] [<c04ec0a4>] (prepare_namespace+0x154/0x1b4) from [<c04eb8f4>]
(kernel_init+0x168/0x1a4)
[ 2.404971] [<c04eb8f4>] (kernel_init+0x168/0x1a4) from [<c000eae0>]
(kernel_thread_exit+0x0/0x8)
PANIC: VFS: Unable to mount root fs on unknown-block(179,2
--
Andrei Gherzan
m: +40.744.478.414 | f: +40.31.816.28.12
next prev parent reply other threads:[~2013-01-27 11:32 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-26 11:18 [meta-raspberrypi][PATCH 3/3] sdcard-image: Use the size of the generated rootfs Jan Schmidt
[not found] ` <20130126224705.GA17428@gmail.com>
[not found] ` <51050cf0.a952420a.022b.5f25SMTPIN_ADDED_BROKEN@mx.google.com>
2013-01-27 11:32 ` Andrei Gherzan [this message]
2013-01-27 12:04 ` Jan Schmidt
[not found] ` <510517ec.8752420a.75af.fffffe36SMTPIN_ADDED_BROKEN@mx.google.com>
2013-03-13 17:46 ` Andrei Gherzan
2013-03-13 21:03 ` Jan Schmidt
[not found] ` <5140e9b9.a8b7320a.12d8.fffffb01SMTPIN_ADDED_BROKEN@mx.google.com>
2013-05-01 20:15 ` Andrei Gherzan
-- strict thread matches above, loose matches on Subject: below --
2013-01-25 13:33 [meta-raspberrypi][PATCH 1/3] linux: Add a Linux 3.6 kernel recipe Jan Schmidt
2013-01-25 13:33 ` [meta-raspberrypi][PATCH 3/3] sdcard-image: Use the size of the generated rootfs Jan Schmidt
2013-01-26 0:19 ` Andrei Gherzan
2013-01-26 8:53 ` Jan Schmidt
[not found] ` <5103997b.a3e8440a.60aa.ffffa1c8SMTPIN_ADDED_BROKEN@mx.google.com>
2013-01-26 10:26 ` Andrei Gherzan
2013-01-26 11:13 ` Jan Schmidt
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=20130127113217.GB25275@gmail.com \
--to=andrei@gherzan.ro \
--cc=thaytan@noraisin.net \
--cc=yocto@yoctoproject.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.