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.