[OE-core] [PATCH] image.bbclass: Add additional bb.debug to help track 12304
Andre McCurdy
armccurdy at gmail.com
Thu Dec 7 05:03:34 UTC 2017
On Wed, Dec 6, 2017 at 8:28 PM, Saul Wold <sgw at linux.intel.com> wrote:
> We actually caught the ext4 size issue in the wild with the debug
> output in the oe_mkext234fs() code, but it did not help. What that
> showed was that the get_rootfs_size was returning a default size of
> 8192, where as the actual rootfs was more like 10572, thus too large
> to fit in the created sparse file.
>
> This additional temporary debug code should help us determine where
> the failure might be.
It might also be useful to save away the output of "ls -lR" for the
rootfs dir as seen by both get_rootfs_size() and oe_mkext234fs(), so
that it the apparent size is changing between the times these two
functions run we'll get some clues as to why.
> More debug for
> [YOCTO #12304]
>
> Signed-off-by: Saul Wold <sgw at linux.intel.com>
> ---
> meta/classes/image.bbclass | 28 ++++++++++++++++++++++++----
> 1 file changed, 24 insertions(+), 4 deletions(-)
>
> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
> index d93de02b759..9964393e211 100644
> --- a/meta/classes/image.bbclass
> +++ b/meta/classes/image.bbclass
> @@ -519,7 +519,7 @@ python () {
> #
> # Compute the rootfs size
> #
> -def get_rootfs_size(d):
> +def get_rootfs_size(d, force_size=0):
> import subprocess
>
> rootfs_alignment = int(d.getVar('IMAGE_ROOTFS_ALIGNMENT'))
> @@ -531,24 +531,35 @@ def get_rootfs_size(d):
> initramfs_fstypes = d.getVar('INITRAMFS_FSTYPES') or ''
> initramfs_maxsize = d.getVar('INITRAMFS_MAXSIZE')
>
> - output = subprocess.check_output(['du', '-ks',
> + if (force_size != 0):
> + size_kb = force_size
> + else:
> + output = subprocess.check_output(['du', '-ks',
> d.getVar('IMAGE_ROOTFS')])
> - size_kb = int(output.split()[0])
> + size_kb = int(output.split()[0])
> +
> base_size = size_kb * overhead_factor
> - base_size = max(base_size, rootfs_req_size) + rootfs_extra_space
> + bb.debug(1, '%f = %d * %f' % (base_size, size_kb, overhead_factor))
> + base_size2 = max(base_size, rootfs_req_size) + rootfs_extra_space
> + bb.debug(1, '%f = max(%f, %d)[%f] + %d' % (base_size2, base_size, rootfs_req_size, max(base_size, rootfs_req_size), overhead_factor))
>
> + base_size = base_size2
> if base_size != int(base_size):
> base_size = int(base_size + 1)
> else:
> base_size = int(base_size)
> + bb.debug(1, '%f = int(%f)' % (base_size, base_size2))
>
> + base_size_saved = base_size
> base_size += rootfs_alignment - 1
> base_size -= base_size % rootfs_alignment
> + bb.debug(1, '%d = aligned(%d)' % (base_size, base_size_saved))
>
> # Do not check image size of the debugfs image. This is not supposed
> # to be deployed, etc. so it doesn't make sense to limit the size
> # of the debug.
> if (d.getVar('IMAGE_BUILDING_DEBUGFS') or "") == "true":
> + bb.debug(1, 'returning debugfs size %d' % (base_size))
> return base_size
>
> # Check the rootfs size against IMAGE_ROOTFS_MAXSIZE (if set)
> @@ -566,6 +577,8 @@ def get_rootfs_size(d):
> (base_size, initramfs_maxsize_int))
> bb.error("You can set INITRAMFS_MAXSIZE a larger value. Usually, it should")
> bb.fatal("be less than 1/2 of ram size, or you may fail to boot it.\n")
> +
> + bb.debug(1, 'returning %d' % (base_size))
> return base_size
>
> python set_image_size () {
> @@ -574,6 +587,13 @@ python set_image_size () {
> d.setVarFlag('ROOTFS_SIZE', 'export', '1')
> }
>
> +do_testsize[nostamp] = "1"
> +python do_testsize() {
> + sz = get_rootfs_size(d, 10572)
> + bb.warn('size is %d' % sz)
> +}
> +addtask do_testsize
> +
> #
> # Create symlinks to the newly created image
> #
> --
> 2.13.6
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
More information about the Openembedded-core
mailing list