Re: [poky] [PATCH v3] genericarm64 core-image-initramfs-boot: remove some kernel drivers

Mikko Rapeli <[email protected]> Fri, 17 Apr 2026 12:25:29 +0300
Newsgroups org.yoctoproject.lists.poky
Message-ID <aeH8idgVfQ5I0UqT@nuoska>
Hi,

On Fri, Apr 17, 2026 at 10:10:07AM +0100, Richard Purdie wrote:
> On Mon, 2026-04-13 at 10:27 +0300, Mikko Rapeli via lists.yoctoproject.org wrote:
> > genericarm64 supports a lot of HW and thus large collection of kernel
> > drivers are enabled and installed to images by default.
> > Subset of the kernel drivers are needed in initramfs to mount rootfs
> > from local mass storage devices. This increases initramfs size a lot
> > and with new kernel config updates even more. Thus remove kernel
> > drivers from initramfs image which are not needed for mounting
> > rootfs from local mass storage devices. GPU, Bluetooth, NFC,
> > sound, networking etc support is not needed in the initramfs.
> > 
> > According to buildhistory core-image-initramfs-boot size is reduced
> > from 118 to 83 Mb.
> > 
> > Signed-off-by: Mikko Rapeli <[email protected]>
> > ---
> > �.../images/core-image-initramfs-boot.bbappend | 28 +++++++++++++++++++
> > �1 file changed, 28 insertions(+)
> > �create mode 100644 meta-yocto-bsp/recipes-core/images/core-image-initramfs-boot.bbappend
> > 
> > v3: added PATHS_TO_REMOVE variable so that it can be customized
> > ��� as suggested by Jose Quaresma <[email protected]>
> > 
> > v2: https://lists.yoctoproject.org/g/poky/message/13894
> > 
> > diff --git a/meta-yocto-bsp/recipes-core/images/core-image-initramfs-boot.bbappend b/meta-yocto-bsp/recipes-core/images/core-image-initramfs-boot.bbappend
> > new file mode 100644
> > index 000000000000..2298c2f94740
> > --- /dev/null
> > +++ b/meta-yocto-bsp/recipes-core/images/core-image-initramfs-boot.bbappend
> > @@ -0,0 +1,28 @@
> > +POSTFUNCS = ""
> > +POSTFUNCS:genericarm64 = "reduce_initrd_size"
> > +
> > +PATHS_TO_REMOVE = ""
> > +# these kernel modules are not needed for rootfs mount from local mass storage
> > +# and can be loaded from main rootfs by udev
> > +PATHS_TO_REMOVE:genericarm64 = "\
> > +��� ${WORKDIR}/rootfs/${libdir}/modules/*/kernel/drivers/bluetooth \
> > +��� ${WORKDIR}/rootfs/${libdir}/modules/*/kernel/drivers/gpu \
> > +��� ${WORKDIR}/rootfs/${libdir}/modules/*/kernel/drivers/media \
> > +��� ${WORKDIR}/rootfs/${libdir}/modules/*/kernel/drivers/net \
> > +��� ${WORKDIR}/rootfs/${libdir}/modules/*/kernel/drivers/nfc \
> > +��� ${WORKDIR}/rootfs/${libdir}/modules/*/kernel/drivers/usb/gadget \
> > +��� ${WORKDIR}/rootfs/${libdir}/modules/*/kernel/fs/fuse \
> > +��� ${WORKDIR}/rootfs/${libdir}/modules/*/kernel/net/bluetooth \
> > +��� ${WORKDIR}/rootfs/${libdir}/modules/*/kernel/net/bridge \
> > +��� ${WORKDIR}/rootfs/${libdir}/modules/*/kernel/net/netfilter \
> > +��� ${WORKDIR}/rootfs/${libdir}/modules/*/kernel/net/nfc \
> > +��� ${WORKDIR}/rootfs/${libdir}/modules/*/kernel/sound \
> > +"
> > +
> > +do_rootfs[postfuncs] += "${POSTFUNCS}"
> > +reduce_initrd_size () {
> > +��� if [ -n "${PATHS_TO_REMOVE}" ]; then
> > +������� rm -rf ${PATHS_TO_REMOVE}
> > +��� fi
> > +}
> > +
> 
> This is a tough one. There are some simple things like "POSTFUNCS"
> being a bit generic as a name. I also worry a little this may trip up
> yocto-check-layer with the added variable POSTFUNCS, even if it is
> empty. I think if we're creating this as API, listing the directories:
> 
>     drivers/bluetooth \
>     drivers/gpu \
>     drivers/media \
>     drivers/net \
>     drivers/nfc \
>     drivers/usb/gadget \
>     fs/fuse \
>     net/bluetooth \
>     net/bridge \
>     net/netfilter \
>     net/nfc \
>     sound \
> 
> and then adding the prefix would probably be cleaner too. Those are all
> easier tweaks.
> 
> The bigger challenge is "generic" kernel adding all this. Ideally you
> wouldn't install these things to the initramfs in the first place, then
> you wouldn't need to delete them. I'm not sure how you could
> detect/filter and install only the subset of modules you want, or how
> that list of modules would be maintained/updated.

kernel-modules correctly get installed to all images through MACHINE_EXTRA_RDEPENDS.
This is flexible to drivers being built-in or modules. IMO initramfs
image should not be explicitly tied to the exact kernel config and thus
should not depend on the exact set of kernel module packages. A slightly more abstract
interface between kernel and initramfs image is needed, and "kernel-modules"
decent at that. This works well for the real rootfs but is not optimal for
initramfs.

> A different package to "kernel-modules" could be one idea, how you
> construct that, again, I'm less sure. The above filter list could be
> used to iterate the modules and filter by path I guess?

I had a patchset for this but ran into issues with it.

https://lists.openembedded.org/g/openembedded-core/topic/112087526#msg214354

I don't see how that can move forward though.
 
> Now we've merged the firmware update, the builds are breaking but some
> of these kinds of changes are probably too late for the release/LTS.
> 
> Perhaps we just have to increase the size of the initramfs for now :(

Sigh, alright then.

Cheers,

-Mikko