You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:52:49