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