How do I enumerate firmware used by compiled-in drivers?

From: Michael Conrad
Date: Tue Dec 17 2013 - 01:39:52 EST


Hi, I am trying to maintain an initrd for a homebrew Linux distro. I'm having a problem where kernel modules are gradually shifting from linux/firmware to /lib/firmware, which breaks my initrd (which currently uses CONFIG_FIRMWARE_IN_KERNEL). I am looking for a way to extract a list of needed firmware files from my compiled kernel so that I can include them in my initrd. I want to automate this so that I don't have to fight it on every kernel upgrade. A helpful fellow on freenode #kernel pointed out that modinfo contains a list of firmware names, but didn't know any way to find that information for compiled-in drivers. Is there any way I can do this?

More context:

I have an initrd, so I'm ok with the idea of switching from firmware-in-kernel to /lib/firmware. However /lib/firmware is 57 MB and contains many firmware files which aren't even used by Linux 3.10.17 or by my configuration. I want to include only the ones that the kernel might try to load.

I want to support most popular network and storage chipsets, plus a few specific less popular ones, so I have lots of drivers selected (some modules, some compiled-in) and I don't want to be surprised when a driver (like bnx2) decides to switch from an in-kernel firmware to a lib/firmware file. I want my kernel-build script to search for and include these AUTOMATICALLY, because there are too many to inspect them by hand each time I upgrade.

Does anyone have advice for this?

Thanks in advance.
-Mike
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/