As tested at 202101, the –hyperv flag now works on genkernel, so the below is completely un-needed, but kept for historical purposes. Currently all you need is genkernel –hyperv all
–disklabel is now built into genkernel as default so not needed as a parameter
As at 201804 (and 201908 - updated), genkernel cannot create either a kernel or an initramfs that will boot under hyperv. The ata_piix module ignores the ata emulation support ( with kernel message “Hyper-V Virtual Machine detected, ATA device ignore set” ) if CONFIG_HYPERV_STORAGE is set. Therefore either dont set it to use ata_piix, or make sure the resulting module (hv_storvsc) actually loads.
Under hyperV, kernels created via genkernel also need hyperv network support. This is enabled manually in the config file. When upgrading kernel, start with genkernel's fresh config (run genkernal all, then interupt it once config is generated). Then add hyperV support. The –hyperv option to genkernel is meant to do this, but didnt work in my case. (see https://wiki.gentoo.org/wiki/Hyper-V ). Alternatively, Add a “Legacy Network” in hyperv and use the DEC Tulip module (100BaseFX only).
Here are the changes needed from default using “make menuconfig” in the linux source directory: -Processor type and features, Linux Guest support -Device Drivers, Microsoft HyperV guest support, (all as modules) -Device Drivers, Network device support, Microsoft Hyper-V virtual network driver as module (do a search for hyperv with '/' key and make sure relevent modules are enabled)
copy config to /boot
then, edit /usr/share/genkernel/arch/x86/modules_load and add
- hv_vmbus - to MODULES_PATA
- hv_storvsc - to MODULES_SCSI
- hv_netvsc - to MODULES_NET
- hv_utils and hv_balloon to MODULES_USB
then, genkernel –kernel-config=/boot/the-file-you-copied-above all