-
|
Component: ArmVirtPkg I'm trying to test PXE boot support for an UNDI network driver on AArch64 using QEMU. I've successfully tested this same driver on x64 with OVMF, but haven't had any luck with AArch64 using ArmVirtQemu. I've tried both prebuilt OVMF images and builds I've compiled locally from the EDK2 source, including my own build of ArmVirtQemu. Initially, none of the networking drivers were loading, but adding the -device virtio-rng-pci option to QEMU resolved that issue (thanks to this discussion: #11348). Now, the driver appears to load correctly and installs the NII protocol components, but my UndiEntryPoint is never called. Does anyone know how to troubleshoot this further, or whether PXE boot via UNDI is even supported on AArch64 with this setup? |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment
-
|
I enabled debug logging, and that uncovered a further error I had to align my SW Undi struct to 16 bytes, and the driver was recognized as a PXE device This is noted in the spec, but not sure why it wasn't an issue for OVMF/X86 "!PXE structure signature. This field is used to locate an UNDI hardware or software interface in system memory (or I/O) space. ‘!’ is in the first (lowest address) byte, ‘P’ is in the second byte, ‘X’ in the third and ‘E’ in the last. This field must be aligned on a 16-byte boundary (the last address byte must be zero)." - https://uefi.org/specs/UEFI/2.10/Apx_E_Universal_Network_Driver_Interfaces.html |
Beta Was this translation helpful? Give feedback.
I enabled debug logging, and that uncovered a further error
I had to align my SW Undi struct to 16 bytes, and the driver was recognized as a PXE device
This is noted in the spec, but not sure why it wasn't an issue for OVMF/X86
"!PXE structure signature. This field is used to locate an UNDI hardware or software interface in system memory (or I/O) space. ‘!’ is in the first (lowest address) byte, ‘P’ is in the second byte, ‘X’ in the third and ‘E’ in the last. This field must be aligned on a 16-byte boundary (the last address byte must be zero)…