public inbox for openembedded-core@lists.openembedded.org
 help / color / mirror / Atom feed
* [PATCH v2 1/2] runqemu: remove setting of mem on kernel command line for certain systems
@ 2025-10-03 15:08 Jon Mason
  2025-10-03 15:08 ` [PATCH v2 2/2] runqemu: resize rootfs image to power of 2 for SD or pflash Jon Mason
  2025-10-06  8:58 ` [OE-core] [PATCH v2 1/2] runqemu: remove setting of mem on kernel command line for certain systems Alexander Kanavin
  0 siblings, 2 replies; 4+ messages in thread
From: Jon Mason @ 2025-10-03 15:08 UTC (permalink / raw)
  To: openembedded-core

Some emulated hardware will not boot if mem is set on the kernel command
line.  Also, it is not necessary if the device tree file, as that
_should_ have the memory size specified in it.  Add a check for QB_DTB
and don't set it if specified.

Signed-off-by: Jon Mason <jon.mason@arm.com>
---
 scripts/runqemu | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/runqemu b/scripts/runqemu
index 32c7a2aab3b5..a8144aa68c3d 100755
--- a/scripts/runqemu
+++ b/scripts/runqemu
@@ -884,7 +884,7 @@ to your build configuration.
         self.set('QB_MEM', qb_mem)
 
         mach = self.get('MACHINE')
-        if not mach.startswith(('qemumips', 'qemux86', 'qemuloongarch64')):
+        if not mach.startswith(('qemumips', 'qemux86', 'qemuloongarch64')) and self.get('QB_DTB') == "":
             self.kernel_cmdline_script += ' mem=%s' % self.get('QB_MEM').replace('-m','').strip() + 'M'
 
         self.qemu_opt_script += ' %s' % self.get('QB_MEM')
-- 
2.50.1 (Apple Git-155)



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v2 2/2] runqemu: resize rootfs image to power of 2 for SD or pflash
  2025-10-03 15:08 [PATCH v2 1/2] runqemu: remove setting of mem on kernel command line for certain systems Jon Mason
@ 2025-10-03 15:08 ` Jon Mason
  2025-10-06  8:58 ` [OE-core] [PATCH v2 1/2] runqemu: remove setting of mem on kernel command line for certain systems Alexander Kanavin
  1 sibling, 0 replies; 4+ messages in thread
From: Jon Mason @ 2025-10-03 15:08 UTC (permalink / raw)
  To: openembedded-core

QEMU requires that SD and pflash images are sized to be a power of 2
(e.g., 32M, 64M, etc).  So, if the image being used is not a power of 2
and it's being used for SD or pflash, increase it to the next power of 2
size via the truncate command.

This might not be an actual spec requirement, and is being investigated
in https://gitlab.com/qemu-project/qemu/-/issues/1754

Signed-off-by: Jon Mason <jon.mason@arm.com>
---
 scripts/runqemu | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/scripts/runqemu b/scripts/runqemu
index a8144aa68c3d..21d75ad8a319 100755
--- a/scripts/runqemu
+++ b/scripts/runqemu
@@ -421,8 +421,27 @@ class BaseConfig(object):
         else:
             raise RunQemuError("Unknown path arg %s" % p)
 
-    def uncompress_rootfs(self):
-        """Decompress ZST rootfs image if needed"""
+    def rootfs_fixups(self):
+
+        """Decompress and/or resize the rootfs image, if needed"""
+        qb_rootfs_opt = self.get('QB_ROOTFS_OPT')
+
+        # Check if sdcard size is a power of 2, as that is currently a requirement for qemu
+        # See https://gitlab.com/qemu-project/qemu/-/issues/1754
+        rootfs_size = os.path.getsize(self.rootfs)
+        rootfs_size_pwr2 = 1 << (rootfs_size - 1).bit_length()
+        if ("if=sd" in qb_rootfs_opt or "if=pflash" in qb_rootfs_opt) and rootfs_size != rootfs_size_pwr2:
+            logger.info("Using sd-card or pflash and is not power of 2. File size %d, power of 2 size %d" %(rootfs_size, rootfs_size_pwr2))
+            logger.info("Attempting to use truncate to correct this.")
+
+            # Ensure the 'truncate' tool is installed before attempting to make a power of 2.
+            if not shutil.which('truncate'):
+                raise RunQemuError(f"'truncate' is required to make {self.rootfs} a power of 2 in size but was not found in PATH")
+            try:
+                subprocess.check_call(['truncate', '-s', str(rootfs_size_pwr2), self.rootfs])
+            except subprocess.CalledProcessError as e:
+                raise RunQemuError(f"Failed to make {self.rootfs} power of 2 in size: {e}")
+
         if not self.rootfs or not self.fstype.endswith('.zst'):
             return
         
@@ -1808,7 +1827,7 @@ def main():
         config.check_args()
         config.read_qemuboot()
         config.check_and_set()
-        config.uncompress_rootfs()
+        config.rootfs_fixups()
         # Check whether the combos is valid or not
         config.validate_combos()
         config.print_config()
-- 
2.50.1 (Apple Git-155)



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [OE-core] [PATCH v2 1/2] runqemu: remove setting of mem on kernel command line for certain systems
  2025-10-03 15:08 [PATCH v2 1/2] runqemu: remove setting of mem on kernel command line for certain systems Jon Mason
  2025-10-03 15:08 ` [PATCH v2 2/2] runqemu: resize rootfs image to power of 2 for SD or pflash Jon Mason
@ 2025-10-06  8:58 ` Alexander Kanavin
  2025-10-06 14:16   ` Jon Mason
  1 sibling, 1 reply; 4+ messages in thread
From: Alexander Kanavin @ 2025-10-06  8:58 UTC (permalink / raw)
  To: jon.mason; +Cc: openembedded-core

On Fri, 3 Oct 2025 at 17:08, Jon Mason via lists.openembedded.org
<jon.mason=arm.com@lists.openembedded.org> wrote:
>
> Some emulated hardware will not boot if mem is set on the kernel command

Please replace 'some' and 'certain' with actual examples, or rewrite
the commit message to remove these vague-on-purpose words altogether.

Alex


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [OE-core] [PATCH v2 1/2] runqemu: remove setting of mem on kernel command line for certain systems
  2025-10-06  8:58 ` [OE-core] [PATCH v2 1/2] runqemu: remove setting of mem on kernel command line for certain systems Alexander Kanavin
@ 2025-10-06 14:16   ` Jon Mason
  0 siblings, 0 replies; 4+ messages in thread
From: Jon Mason @ 2025-10-06 14:16 UTC (permalink / raw)
  To: alex.kanavin; +Cc: jon.mason, openembedded-core

On Mon, Oct 6, 2025 at 4:59 AM Alexander Kanavin via
lists.openembedded.org <alex.kanavin=gmail.com@lists.openembedded.org>
wrote:
>
> On Fri, 3 Oct 2025 at 17:08, Jon Mason via lists.openembedded.org
> <jon.mason=arm.com@lists.openembedded.org> wrote:
> >
> > Some emulated hardware will not boot if mem is set on the kernel command
>
> Please replace 'some' and 'certain' with actual examples, or rewrite
> the commit message to remove these vague-on-purpose words altogether.

Well, this is embarrassing.  Ross made that same comment and I sent
that change out (see Message-ID:
<20251001175702.62563-1-jon.mason@arm.com>,
https://lists.openembedded.org/g/openembedded-core/message/224316),
but I lost that change somehow when making the v2 change.  Let me pull
that one off the lists and do a v3 (with this change and the comment
change of v2).

Sorry and thanks,
Jon

> Alex
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#224468): https://lists.openembedded.org/g/openembedded-core/message/224468
> Mute This Topic: https://lists.openembedded.org/mt/115571450/3616920
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [jdmason@kudzu.us]
> -=-=-=-=-=-=-=-=-=-=-=-
>


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-10-06 14:16 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-03 15:08 [PATCH v2 1/2] runqemu: remove setting of mem on kernel command line for certain systems Jon Mason
2025-10-03 15:08 ` [PATCH v2 2/2] runqemu: resize rootfs image to power of 2 for SD or pflash Jon Mason
2025-10-06  8:58 ` [OE-core] [PATCH v2 1/2] runqemu: remove setting of mem on kernel command line for certain systems Alexander Kanavin
2025-10-06 14:16   ` Jon Mason

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox