问题描述
我正在使用 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 (将#修改为@)