[PATCH] qemuarm-trixie: Workaround with missing drivers in qemuarm-trixie initrd

2 views
Skip to first unread message

Zhihang Wei

unread,
Feb 20, 2026, 6:53:44 AM (5 days ago) Feb 20
to isar-...@googlegroups.com
This is a workaround to fix the current qemuarm-trixie image unbootable
issue.

Starting with Debian Trixie, update-initramfs invokes "dracut-install"
to collect and install required drivers into the generated initrd.
"dracut-install" relies on fts_open() / fts_read() from glibc to
traverse directories and locate drivers.

Due to a long-standing bug [1] between qemu and glibc, the fts_*
functions may fail to find files on certain 32-bit architectures. As a
result, required modules such as virtio_blk are not detected and not
added to the initrd. The produced image then fails to boot under qemu
because the block device driver is missing.

A similiar dracut bug report was filed in 2024 [2], pointing to this
upstream glibc issue reported in 2018 [1]. No upstream fix has been
applied, and the issue appears to affect only qemu builds for specific
32-bit targets.

As a temporary workaround, introduce INITRAMFS_EXTRA_DRIVERS and use it
to append the neccessary drivers that are currently missed from the
initrd.

For a complete fix, we either need to push for an upstream glibc/qemu
fix, or convince dracut to avoid using these non-POSIX fts_* functions
and use opendir() / readdir() instead.

[1] https://sourceware.org/bugzilla/show_bug.cgi?id=23960
[2] https://bugs-devel.debian.org/cgi-bin/bugreport.cgi?bug=1079443

Signed-off-by: Zhihang Wei <w...@ilbers.de>
---
meta-isar/conf/multiconfig/qemuarm-trixie.conf | 2 ++
meta/classes-recipe/rootfs.bbclass | 9 ++++++++-
2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/meta-isar/conf/multiconfig/qemuarm-trixie.conf b/meta-isar/conf/multiconfig/qemuarm-trixie.conf
index 5600ab23..dcf0b839 100644
--- a/meta-isar/conf/multiconfig/qemuarm-trixie.conf
+++ b/meta-isar/conf/multiconfig/qemuarm-trixie.conf
@@ -5,3 +5,5 @@

MACHINE ?= "qemuarm"
DISTRO ?= "debian-trixie"
+
+INITRAMFS_EXTRA_DRIVERS += "virtio_blk"
diff --git a/meta/classes-recipe/rootfs.bbclass b/meta/classes-recipe/rootfs.bbclass
index 8485b32f..65843f61 100644
--- a/meta/classes-recipe/rootfs.bbclass
+++ b/meta/classes-recipe/rootfs.bbclass
@@ -12,12 +12,19 @@ ROOTFS_DISTRO ?= "${DISTRO}"
# the default initramfs generator and it is not
# possible to derive the value in another way
ROOTFS_USE_DRACUT ??= ""
+INITRAMFS_EXTRA_DRIVERS ?= ""

def initramfs_generator_cmdline(d):
rootfs_packages = d.getVar('ROOTFS_PACKAGES') or ''
+ extra_drivers = d.getVar('INITRAMFS_EXTRA_DRIVERS') or ''
if 'dracut' in rootfs_packages or bb.utils.to_boolean(d.getVar('ROOTFS_USE_DRACUT')):
return "dracut --force --kver \"$kernel_version\""
- return "update-initramfs -u -v -k \"$kernel_version\""
+ cmds = []
+ if extra_drivers:
+ for drv in extra_drivers.split():
+ cmds.append(f'echo {drv} | tee -a /etc/initramfs-tools/modules')
+ cmds.append('update-initramfs -u -v -k "$kernel_version"')
+ return " && ".join(cmds)

ROOTFS_PACKAGES ?= ""
ROOTFS_VARDEPS ?= ""
--
2.39.5

Jan Kiszka

unread,
Feb 20, 2026, 6:59:12 AM (5 days ago) Feb 20
to Zhihang Wei, isar-...@googlegroups.com
This is not a nice way to work around the issue. The variable introduced
here is bypassing how initramfs are configured via their generators in
isar (recipes for hooks or modules). Use that, please.

Jan

--
Siemens AG, Foundational Technologies
Linux Expert Center
Reply all
Reply to author
Forward
0 new messages