From patchwork Mon Jun 2 21:30:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Berton X-Patchwork-Id: 64106 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6295BC5AD49 for ; Mon, 2 Jun 2025 21:30:18 +0000 (UTC) Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) by mx.groups.io with SMTP id smtpd.web11.6953.1748899807968207080 for ; Mon, 02 Jun 2025 14:30:08 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20230601 header.b=AHt+MVI8; spf=pass (domain: gmail.com, ip: 209.85.128.41, mailfrom: fbberton@gmail.com) Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-451d7b50815so14099065e9.2 for ; Mon, 02 Jun 2025 14:30:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748899806; x=1749504606; darn=lists.openembedded.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=7IyxEevMV6mcS1SyAIoFpiFJcu84d5ZJOP+3iTZpLC0=; b=AHt+MVI8cYmOiR1LJ5NheZPI99wrkd8gxSPue6BSgktXtX0FBuLJoY1JAHf/rR62he iLtKQ8e9RV87d70Sj2CwuTsQVTe1ViNSix65n5hxhe7jMwNLXTDNmpDRfzvk8hNXH/F7 id4vMN5FCeo1rJrEhbfhfF26HGoNif0SxXxKFPQwne0WWK9GqYRgCaPzw1+KBbLBOx1D FY6T0eih0k9qBprIzEp87jkW42fLhNJUoB3hiyTfABUndsDVlwvzDU9IuHyb7ZhUjWli Vh//Uxg/xSIvt55XFoEmOwXYSaX4gr9pSjYLpkBGrQ4mY9nNG702jIQ5hEtACcOiiegq 8uzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748899806; x=1749504606; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=7IyxEevMV6mcS1SyAIoFpiFJcu84d5ZJOP+3iTZpLC0=; b=drBITMRWDgJ+eFOAaGeyDAS6UR4vNV9qqV2dEPcycBSJPd/Nw6esxSImS5ZutYEuW6 Jhb69rQM0h2W4Edp4lNVZmTJSS0xgsfxk7Q/MK0/Nr72jY0sowKfBX0uoLS1+qoZpSJQ PghD+20lrnYR/Kq3i3WTncb5X5Qj6Wqx7gVaOsHgN2Vt7tBQdgoHrtZKYOUVdOFc7yJl qlZfgCJt29FBriX1ei7PJjOe4cqCqPgmaKkc/VZ+YNxM1rOFOj1AIBmpGat9I5aL6qlx 2dUUBf2GwlhQ6J9Oixl4r8Eu56XOmAO81nusAf4cAsvGGAcfUvuva1cMwGNdJTLImLyt bltQ== X-Gm-Message-State: AOJu0YxA9aIQS6zclNjUkauYXaZMoFjViJdLtirse0XfHw9ZS4hL2lFv sK5vXDZNpsHuf47hc6oEjcseF0feohpqaN3+Y5MH2iADS18jsXxTsyeyx8FN8A== X-Gm-Gg: ASbGncuYZ91w62Rurk2rXEKbNjuuskS/TOQgUuuOnFklnCmEjt68CW6Y+GZUwJsCtR9 UAodogNJpkoxE34wt3RQ7EI70hU4sN9uBnTUcHrYHJdMlA1hYG7dA2Uw1CidiqDwFrVAyXEwSpk 3Voyc9JCjpJrF+p3QdDp/zwPTEx16yQyXLJtrggOOfm9NNEsFpFnf1Yu7Y1390BoC5KN8Z1ng9S Eubskx64sagnixEBHz35yIbUnnb6zGfJs9dtv5fpv80w+162qVkuANm0Xfh2t2/vrfq/2FiJzzX QIBOC+DfVu26l7HrHvT/mZrwJc/KsR056ON6CfcKamnXuLYzUXZlwXauyzqVnmw= X-Google-Smtp-Source: AGHT+IE1lb++pNfaLHPy5mvD/friAP8OuEdlH7VulOjr7EF1Zc0+qKLXZTEctyH/9lVTWWSYTTUvwA== X-Received: by 2002:a05:600c:348c:b0:450:d07e:ee14 with SMTP id 5b1f17b1804b1-450d8874cecmr138473315e9.17.1748899805943; Mon, 02 Jun 2025 14:30:05 -0700 (PDT) Received: from CTW01359.Home ([213.205.68.220]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450d7fb80e9sm133764785e9.27.2025.06.02.14.30.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Jun 2025 14:30:05 -0700 (PDT) From: Fabio Berton To: openembedded-core@lists.openembedded.org Subject: [PATCH] classes-recipe/image: Add variable to create rootfs with a exact size Date: Mon, 2 Jun 2025 22:30:04 +0100 Message-ID: <20250602213004.2123954-1-fbberton@gmail.com> X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Mon, 02 Jun 2025 21:30:18 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/217735 From: Fabio Berton Add the IMAGE_ROOTFS_EXACT_SIZE variable to allow the creation of a root filesystem with an exact size as specified by the user. This bypasses the default size calculation done by the get_rootfs_size function. This feature is useful for creating a small ext4 filesystem with a block size of 1k. The get_rootfs_size function uses a block size of 4k to determine the size of IMAGE_ROOTFS, which may be larger than the value set in IMAGE_ROOTFS_SIZE. If an ext4 rootfs with a block size of 1K is nearly full, the .ext4 file generated by Yocto will be larger than expected due to the way get_rootfs_size calculates the size. By using IMAGE_ROOTFS_EXACT_SIZE, users can specify the exact size required. Users should ensure that the size is set correctly according to the filesystem requirements. It is not easy to predict the block size that is used by a filesystem because it can be set by a parameter or it can be added automatically by the tool that creates the file system. Signed-off-by: Fabio Berton --- meta/classes-recipe/image.bbclass | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/meta/classes-recipe/image.bbclass b/meta/classes-recipe/image.bbclass index 24a19fce1a..2df0a5c30d 100644 --- a/meta/classes-recipe/image.bbclass +++ b/meta/classes-recipe/image.bbclass @@ -132,7 +132,7 @@ python () { def rootfs_variables(d): from oe.rootfs import variable_depends - variables = ['IMAGE_DEVICE_TABLE','IMAGE_DEVICE_TABLES','BUILD_IMAGES_FROM_FEEDS','IMAGE_TYPES_MASKED','IMAGE_ROOTFS_ALIGNMENT','IMAGE_OVERHEAD_FACTOR','IMAGE_ROOTFS_SIZE','IMAGE_ROOTFS_EXTRA_SPACE', + variables = ['IMAGE_DEVICE_TABLE','IMAGE_DEVICE_TABLES','BUILD_IMAGES_FROM_FEEDS','IMAGE_TYPES_MASKED','IMAGE_ROOTFS_ALIGNMENT','IMAGE_OVERHEAD_FACTOR','IMAGE_ROOTFS_SIZE', 'IMAGE_ROOTFS_EXACT_SIZE', 'IMAGE_ROOTFS_EXTRA_SPACE', 'IMAGE_ROOTFS_MAXSIZE','IMAGE_NAME','IMAGE_LINK_NAME','IMAGE_MANIFEST','DEPLOY_DIR_IMAGE','IMAGE_FSTYPES','IMAGE_INSTALL_COMPLEMENTARY','IMAGE_LINGUAS', 'IMAGE_LINGUAS_COMPLEMENTARY', 'IMAGE_LOCALES_ARCHIVE', 'MULTILIBRE_ALLOW_REP','MULTILIB_TEMP_ROOTFS','MULTILIB_VARIANTS','MULTILIBS','ALL_MULTILIB_PACKAGE_ARCHS','MULTILIB_GLOBAL_VARIANTS','BAD_RECOMMENDATIONS','NO_RECOMMENDATIONS', 'PACKAGE_ARCHS','PACKAGE_CLASSES','TARGET_VENDOR','TARGET_ARCH','TARGET_OS','OVERRIDES','BBEXTENDVARIANT','FEED_DEPLOYDIR_BASE_URI','INTERCEPT_DIR','USE_DEVFS', @@ -594,9 +594,14 @@ def get_rootfs_size(d): return base_size python set_image_size () { - rootfs_size = get_rootfs_size(d) - d.setVar('ROOTFS_SIZE', str(rootfs_size)) - d.setVarFlag('ROOTFS_SIZE', 'export', '1') + rootfs_size = d.getVar('IMAGE_ROOTFS_EXACT_SIZE') + # If IMAGE_ROOTFS_EXACT_SIZE variable is not set, use the result of + # get_rootfs_size as ROOTFS_SIZE. + if not rootfs_size: + rootfs_size = str(get_rootfs_size(d)) + + d.setVar('ROOTFS_SIZE', rootfs_size) + d.setVarFlag('ROOTFS_SIZE', 'export', '1') } #