Gentoo initrd or initramfs
Extract an initramfs from a genkernel built initramfs.
An initramfs in Gentoo is just a compressed .cpio archive, first
find out what compression is used then extract it.
$ file initramfs-genkernel-x86_64-4.19.57-gentoo
initramfs-genkernel-x86_64-4.19.57-gentoo: gzip compressed data, l...
$ zcat initramfs-genkernel-x86_64-4.19.57-gentoo > initramfs-genkernel-x86_64-4.19.57-gentoo.cpio
$ mkdir initramfs
$ cd initramfs
$ cpio -vid < ../initramfs-genkernel-x86_64-4.19.57-gentoo.cpio
This one is gzipped, use xzcat, bzcat, etc as required.
Then change the stuff in the initramfs directory. For example to add hyperv support as modules:
$ cp -r /lib/modules/4.19.57-gentoo/kernel/drivers/hv lib/modules/4.19.57-gentoo/kernel/drivers
$ cp /lib/modules/4.19.57-gentoo/kernel/drivers/scsi/hv_storvsc.ko lib/modules/4.19.57-gentoo/kernel/drivers/scsi
$ cp -r /lib/modules/4.19.57-gentoo/kernel/drivers/net/hyperv lib/modules/4.19.57-gentoo/kernel/drivers/net
And you should then add a new file in etc/modules/ called hv, like this:
$ cat etc/modules/hv
hv_vmbus
hv_utils
hv_balloon
hv_netvsc
hv_storvsc
$
And update the variable HWOPTS_BLK in etc/initrd.defaults so that the above file is used to load the Hyper-V modules:
HWOPTS_BLK='nvme sata scsi usb firewire hv waitscan'
Then wrap it all back up into a .cpio archive and compress it:
find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../initramfs-genkernel-x86_64-4.19.57-gentoo
The above command will overwrite the original initramfs-genkernel-x86_64-4.19.57-gentoo.
Important Notes
The result is not quite the same as that produced by genkernel but it is close and should work most of the time.
