如何解决使用 GNUEFI 协议读取 EDID
我正在使用 GNUEFI 开发操作系统,
我正在尝试按照此 ShowEdid by Fmurphy 从 UEFI 协议中获取 EDID。
但是在编写完所有代码后,我得到了输出 Cannot Locate an Edid
,因为我已经尝试了很多次,但这并没有解决。
我该如何解决这个问题?
EFI_GUID gEfiEdiddiscoveredProtocolGuid = EFI_EDID_disCOVERED_PROTOCOL_GUID;
EFI_EDID_disCOVERED_PROTOCOL *Edp;
EFI_HANDLE *HandleBuffer;
EFI_STATUS Status = EFI_SUCCESS;
BOOLEAN Found = FALSE;
BOOLEAN HexDump = FALSE;
UINTN HandleCount = 0;
// Try to Locate GOP by Handle
Status = gBS->LocateHandleBuffer(ByProtocol,&gEfigraphicsOutputProtocolGuid,NULL,&HandleCount,&HandleBuffer);
if(EFI_ERROR(Status))
{
Print(L"ERROR : No GOP Handle Found. Could Not Locate ann EDID.\n");
return Status;
}
// I am Getting HandleCount = 2;
for (UINT8 i = 0; i < HandleCount; i++)
{
Status = gBS->OpenProtocol(HandleBuffer[i],&gEfiEdiddiscoveredProtocolGuid,(VOID **)&Edp,gImageHandle,EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL);
if(Status == EFI_SUCCESS)
{
Print(L"Status Success\n");
if(!CheckForValidEdid((EDID_DATA_BLOCK *)(Edp->Edid)))
{
Found = TRUE;
if(HexDump)
{
DumpEdid((UINT8 *)(Edp->Edid),(int)sizeof(EDID_DATA_BLOCK));
}
else
{
PrintEdid((EDID_DATA_BLOCK *)(Edp->Edid));
}
}
else
{
Print(L"Error : Invalid EDID Checksum.\n");
}
}
else
{
Print(L"Status Failed : %s\n",HandleBuffer[i]);
}
}
if(!Found) {
Print(L"Cannot Locate an EDID : %d\n",HandleCount);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。