[yocto] [meta-raspberrypi][PATCH 3/3] sdcard-image: Use the size of the generated rootfs

Andrei Gherzan andrei at gherzan.ro
Wed Mar 13 10:46:28 PDT 2013


Any news on this. Still waiting for patches :)


On Sun, Jan 27, 2013 at 2:04 PM, Jan Schmidt <thaytan at noraisin.net> wrote:

> On Sun, 2013-01-27 at 13:32 +0200, Andrei Gherzan wrote:
> > 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
>
> *snip*
>
> > > > > --- 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.
>
> OK.
>
> > About the 4kB thing - yes. Needs fix.
>
> OK.
>
> *snip*
>
> > > > >         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/
>
> Sure, but the largst cluster sizes I've seen are 32KB (do they come
> bigger yet?) 4MiB seems like a large amount for anticipation of future
> cluster sizes.
>
> > > > > +       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:
>
> Interesting! That certainly didn't happen for me. It may depend on the
> exact size and internal layout of the rootfs image being written to the
> SD image file. I'll test as many combinations as I can before
> re-submitting.
>
> J.
>
> > [    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
> >
>
> --
> Jan Schmidt <thaytan at noraisin.net>
>
>


-- 
*Andrei Gherzan*
m: +40.744.478.414 |  f: +40.31.816.28.12
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/yocto/attachments/20130313/33bb5925/attachment.html>


More information about the yocto mailing list