我想知道,我如何访问TCP4Protocol在我的DXE驱动程序中使用。我已经问过类似的问题:myFirstQestion
现在我找不到解决这个错误的方法。
因为在尝试加载驱动程序时,我得到了调试字符串"Can't create child“。选择下面的代码。
也许有人知道如何通过dxe驱动程序从链接中完成我的任务。
谢谢。
#include "Uefi.h"
#include <Protocol/Tcp4.h>
#include <Library/UefiDriverEntryPoint.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Protocol/ServiceBinding.h>
#include <Protocol/SimpleNetwork.h>
#include <Library/DebugLib.h>
EFI_STATUS
EFIAPI
Net1DriverDxeEntry(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
{
EFI_TCP4_PROTOCOL *TCP4protocol = NULL;
EFI_SERVICE_BINDING_PROTOCOL *TCP4ServiceBinding = NULL;
EFI_SIMPLE_NETWORK_PROTOCOL *SimpleNetworkProtocol = NULL;
EFI_HANDLE *HandleBuffer = NULL;
EFI_HANDLE *TCP4Handle = NULL;
UINTN HandleCount;
UINTN i;
CHAR16 *Deb1 = L"Simple network protocol not found\r\n";
CHAR16 *Deb2 = L"TCP4 protocol not found\r\n";
CHAR16 *Deb3 = L"Can't create child\r\n";
CHAR16 *Deb4 = L"Can't handle protocol\n\r\n";
EFI_STATUS Status = gBS->LocateProtocol(&gEfiSimpleNetworkProtocolGuid,NULL, (VOID**) &SimpleNetworkProtocol);
if (EFI_ERROR (Status))
{
DEBUG((-1, "ShowStatus: Simple network protocol not found\n"));
gST->ConOut->OutputString(gST->ConOut, Deb1);
return EFI_UNSUPPORTED;
}
Status = gBS->LocateHandleBuffer(ByProtocol,&gEfiTcp4ProtocolGuid, NULL, &HandleCount,&HandleBuffer);
if (EFI_ERROR (Status))
{
gST->ConOut->OutputString(gST->ConOut, Deb2);
DEBUG((-2, "ShowStatus: TCP4 protocol not found\n"));
return EFI_UNSUPPORTED;
}
for (i = 0; i < HandleCount; i ++)
{
Status = gBS->HandleProtocol(HandleBuffer[i], &gEfiTcp4ServiceBindingProtocolGuid,(VOID **) &TCP4ServiceBinding);
if(EFI_ERROR (Status))
{
DEBUG((-3, "\n"));
gST->ConOut->OutputString(gST->ConOut, Deb3);
return EFI_UNSUPPORTED;
}
TCP4ServiceBinding->CreateChild(TCP4ServiceBinding, TCP4Handle);
Status = gBS->HandleProtocol(TCP4Handle,&gEfiTcp4ProtocolGuid,(VOID **) &TCP4protocol);
if(EFI_ERROR (Status))
{
gST->ConOut->OutputString(gST->ConOut, Deb4);
DEBUG((-4, "ShowStatus: Can't handle protocol\n"));
return EFI_UNSUPPORTED;
}
}
return EFI_SUCCESS;
}发布于 2020-03-19 20:26:34
TCP4Handle的类型应为EFI_HANDLE,而不是EFI_HANDLE*。
EFI_HANDLE TCP4Handle = NULL;
//....
TCP4ServiceBinding->CreateChild(TCP4ServiceBinding, &TCP4Handle);而且您必须查找gEfiTcp4ServiceBindingProtocolGuid,而不是gEfiTcp4ProtocolGuid。
Status = gBS->LocateHandleBuffer(ByProtocol,&gEfiTcp4ServiceBindingProtocolGuid, NULL, &HandleCount,&HandleBuffer);https://stackoverflow.com/questions/60739966
复制相似问题