我如何在本地网络(UEFI DXE)上至少传输“一对字节”

问题描述 投票:0回答:1

我需要编写驱动程序(DXE),该驱动程序可以将“字节对”从虚拟机(QEMU)传输到主机系统(OS-Ubuntu)。我已经阅读了《 UEFI_Spec和开发人员指南》,但是我仍然不明白,如何编写代码以及应该使用哪种协议(试图使用TCPv4,甚至不能使用LocateHandleBuffer)。

EFI_STATUS Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiTcp4ProtocolGuid, NULL, &HandleCount, &HandleBuffer);

我得到:

EFI_UNSUPPORTED

如果smb可以向我解释或可以显示代码示例,我将非常感谢。谢谢。

networking driver uefi
1个回答
0
投票

对于大多数与网络相关的协议,您首先必须使用相应的“服务绑定协议”来获取包含要查找的协议的句柄。

使用此步骤访问Tcp4Protocol:

gBS->LocateHandleBuffer(ByProtovol,gEfiTcp4ServiceBindingProtocolGuid, NULL, &HandleCount, &HandleBuffer);
// Loop over the HandleBuffer Array and pick the one you need
gBS->HandleProtocol(HandleBuffer[YourIndex], &gEfiTcp4ServiceBindingProtocolGuid, &Tcp4SBProtocol);
Tcp4SBProtocol->CreateChild(Tcp4SBProtocol, &Tcp4Handle);
gBS->HandleProtocol(Tcp4Handle, &gEfiTcp4ProtocolGuid, &Tcp4Protocol);

要检查NIC是否可用,可以使用:

// This should return EFI_SUCCESS
gBS->LocateProtocol(&gEfiSimpleNetworkProtocolGuid, NULL, &SimpleNetworkProtocol);
© www.soinside.com 2019 - 2024. All rights reserved.