UEFI环境下无法定位DHCP4服务绑定协议问题求助
UEFI环境下DHCP获取IP失败排查(QEMU+自编译OVMF)
我在UEFI环境中尝试通过DHCP获取IP地址,使用QEMU 8.0.0进行测试,并在自行构建的OVMF中集成了一个Shell命令用于测试,但执行该命令时始终返回Returned Not Found opening dhcp4 binding。
核心测试代码
#include <Uefi.h> #include <Library/ShellLib.h> #include <Protocol/Dhcp4.h> #include <Protocol/ServiceBinding.h> #include <Protocol/SimpleNetwork.h> EFI_STATUS EFIAPI GetIpAddress(VOID) { EFI_SERVICE_BINDING_PROTOCOL *DhcpBinding = NULL; EFI_STATUS Status; Status = gBS->LocateProtocol( &gEfiDhcp4ServiceBindingProtocolGuid, NULL, (VOID**)&DhcpBinding); ShellPrintEx(-1, -1, L"Returned %r opening dhcp4 binding\n", Status); return Status; }
已知情况
- 已确认OVMF构建中包含DHCP4模块
- QEMU默认配置的网络设备正常(安装Linux的虚拟机可正常使用网络)
- UEFI Shell中显示存在iPXE 82754l设备,但执行
ifconfig -l无返回结果 - 尝试先定位并初始化Simple Network Protocol,仍无法通过
gBS->LocateProtocol()找到DHCP4服务绑定协议
构建与QEMU启动配置
OVMF构建命令
$ . ./edksetup.sh $ build --platform OvmfPkg/OvmfPkgX64.dsc --arch X64 --tagname GCC --target DEBUG
我还尝试过添加NETWORK_ENABLE=TRUE、NETWORK_PXE_BOOT_ENABLE=FALSE等编译参数,但均无效果。
QEMU启动命令
$ qemu-system-x86_64 -machine q35,accel=kvm -m 2G \ -smp cpus=2 -cpu Nehalem-v2 \ -debugcon file:qemu_debug.log -global isa-debugcon.iobase=0x402 \ -L /path/to/edk2/build/ -bios /path/to/edk2/build/OVMF.fd
使用Rocky 9提供的OVMF包通过-pflash启动可正常工作,推测自行构建的镜像使用方式有误。
版本测试结果
测试发现,EDK2标签edk2-stable202311和edk2-stable202402构建的OVMF可正常加载网络栈,但edk2-stable202405及之后版本无法加载。
请问我在QEMU配置、UEFI代码实现或OVMF构建中可能遗漏了什么?
内容的提问来源于stack exchange,提问作者Andrew Falanga
相关产品推荐
相关产品推荐

