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
then, genkernel –kernel-config=/boot/the-file-you-copied-above all