As far as I understand, there are 5 options:
- No initramfs, drivers statically linked into kernel, required firmware embedded in kernel
- No initramfs, drivers as loadable modules, required firmware on real root
- Initramfs, drivers as loadable modules in initramfs, required firmware in initramfs
- Initramfs, drivers as loadable modules in initramfs, required irmware on real root
- Initramfs, drivers as loadable modules on real root, required firmware on real root
- Option 1: OK. Firmware must mandatory be embedded into kernel, because statically linked drivers may be loaded before the root fs becomes available. Is that statement correct?
- Option 2: OK. The kernel loads modules after the root fs has become available. So it is fine to have the firmware on real root.
Here are my thoughts on the remaining three options:
- Option 3: Does the kernel load modules from the initramfs or does it needlessly increase the size of the initramfs? Until now I thought the former is correct.
- Option 4: I assume this option is simply bogus. Either the kernel loads modules from initramfs before the real root is available, but then the firmware is missing. Or the kernel does not load modules from initramfs, but then there is no point in putting the modules into the initramfs in the first place. (Note, of course this option makes sense for drivers without firmware, but then option 3 and 4 are identical.)
- Option 5: Will the kernel still load additional modules from the real root after the kernel switched the root fs or is it too late, because the kernel has already probed all hardware? Note, of course the kernel will load additional modules for hardware that will be attached to the computer at a later point (e.g. a USB stick). I am referring to drivers for hardware which is already there when the computer powers up.


