I've been having issues using ipxe to boot Windows 2016 on a HyperV guest
(have managed booting Windows 2016 on other platforms).
I started debugging the various issues:
1. The first issue is that the Windows 2016 winload.exe wants to look for a
security related registry hive on the system partition. The code to do this
recognizes that is running on a VM and therefore tries to initialize the
VMBUS to use the disk via VMBUS (and not via INT13) -- this causes winload
to take over ipxe's VMBUS connection. But afterwards it reverts back to
INT13's that try to use the network interface which uses the VMBUS
connection and hence winload fails.
I've created a very ugly workaround that just fails winload's takeover
attempt but I will need to find a better solution.
2. Afterward winload completes successfully but the kernel gets deadlocked,
first when trying to query the IDE controller (but since I'm using a
sanboot I can disable them) but then when trying to use the VMBUS to use
the Network Adapter.
I've managed running the same test using the Legacy Network Adapter meaning
iPXE doesn't use the vmbus at all -- and everything works as expected.
As I'm not so familiar with the iPXE/vmbus code I was wondering if anyone
has any information that can help.
Can it be that to solve (2) iPXE has a way to do better cleanup of the
vmbus (it seems that the code checks for certain protocol versions etc.) --
also any ideas to solve (1) -- except for the sabotage that I currently
have or code in iPXE to re-take control of the interrupts?
ipxe-devel mailing list