私は GNUEFI で OS を開発しています。
このShowEdid by Fmurphyに従って、UEFI プロトコルから EDID を取得しようとしています。
しかし、すべてのコードを書いた後、Cannot Locate an Edid
私は何度も試したように output を取得しますが、これは修正されていません。
どうすればこれを修正できますか?
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, NULL, 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);
}