From fb331cb62eafd1e534dee292525084ccee0ef3e1 Mon Sep 17 00:00:00 2001 From: Sean Anderson Date: Fri, 12 Aug 2022 15:44:03 -0400 Subject: image_types_sparse: Pad source image to block size If the source image's size is not aligned to the sparse image's block size, then conversion will fail with img2simg: libsparse/sparse.cpp:133: int write_all_blocks(sparse_file*, output_file*): Assertion `pad >= 0' failed. This is a bug in img2simg, but an easy way to work around it is to pad the source image ourselves. The default block size of 4096 matches img2simg's default block size. Signed-off-by: Sean Anderson Signed-off-by: Khem Raj --- meta-oe/classes/image_types_sparse.bbclass | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'meta-oe/classes') diff --git a/meta-oe/classes/image_types_sparse.bbclass b/meta-oe/classes/image_types_sparse.bbclass index 4263593a8d..355a3dafc2 100644 --- a/meta-oe/classes/image_types_sparse.bbclass +++ b/meta-oe/classes/image_types_sparse.bbclass @@ -1,8 +1,16 @@ inherit image_types +# This sets the granularity of the sparse image conversion. Chunk sizes will be +# specified in units of this value. Setting this value smaller than the +# underlying image's block size will not result in any further space saving. +# However, there is no loss in correctness if this value is larger or smaller +# than optimal. This value should be a power of two. +SPARSE_BLOCK_SIZE ??= "4096" + CONVERSIONTYPES += "sparse" -CONVERSION_CMD:sparse = " \ - img2simg "${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}" \ - "${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.sparse" \ -" +CONVERSION_CMD:sparse() { + INPUT="${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}" + truncate --no-create --size=%${SPARSE_BLOCK_SIZE} "$INPUT" + img2simg "$INPUT" "$INPUT.sparse" ${SPARSE_BLOCK_SIZE} +} CONVERSION_DEPENDS_sparse = "android-tools-native" -- cgit v1.2.3-54-g00ecf