我需要编写驱动程序(DXE),该驱动程序可以将“字节对”从虚拟机(QEMU)传输到主机系统(OS-Ubuntu)。我已经阅读了《 UEFI_Spec和开发人员指南》,但是我仍然不明白,如何编写代码以及应该使用哪种协议(试图使用TCPv4,甚至不能使用LocateHandleBuffer)。
EFI_STATUS Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiTcp4ProtocolGuid, NULL, &HandleCount, &HandleBuffer);
我得到:
EFI_UNSUPPORTED
如果smb可以向我解释或可以显示代码示例,我将非常感谢。谢谢。
对于大多数与网络相关的协议,您首先必须使用相应的“服务绑定协议”来获取包含要查找的协议的句柄。
使用此步骤访问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);