我是UEFI的新手,我正尝试在UEFI板上与i2c总线交谈。我试过跟随人们尝试使用USB类似的东西,但是gBS->LocateHandleBuffer似乎没有找到i2c总线。我被引导认为,由于i2c的行为与USB不同,我可能无法对它采取相同的方法,但我无法证实我的怀疑。
在这一点上,任何提示/指针都将不胜感激。
EFI_STATUS
EFIAPI
UefiMain(
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE* SystemTable
)
{
EFI_STATUS Status;
EFI_HANDLE* HandleBuffer = NULL;
UINTN HandleCount = 17;
Print(L"HandleCount: %x\n", HandleCount);
Print(L"HandleBuffer: %x\n", HandleBuffer);
UINTN* freq = (UINTN*)23;
EFI_I2C_DEVICE* i2cDescriptor;
EFI_I2C_ENUMERATE_PROTOCOL* enumerateI2c;
Status = gBS->LocateHandleBuffer(ByProtocol,
&gEfiI2cEnumerateProtocolGuid,
NULL,
&HandleCount,
&HandleBuffer);
if (EFI_ERROR(Status)) {
Print(L"ERROR: LocateHandleBuffer.\n");
Print(L"Status: %x\n", (int)Status);
Print(L"HandleCount: %x\n", HandleCount);
Print(L"HandleBuffer: %x\n", HandleBuffer);
return Status;
}
for (UINT8 Index = 0; Index < HandleCount; Index++) {
Status = gBS->HandleProtocol(HandleBuffer[Index],
&gEfiI2cEnumerateProtocolGuid,
(VOID**)&enumerateI2c);
if (EFI_ERROR(Status)) {
Print(L"ERROR: HandleProtocol.\n");
Print(L"Status: %x\n", (int)Status);
Print(L"HandleCount: %x\n", HandleCount);
Print(L"HandleBuffer: %x\n", HandleBuffer);
FreePool(HandleBuffer);
return Status;
}
Status = enumerateI2c->Enumerate(enumerateI2c, &i2cDescriptor);
Print(L"Starting to enumerate\n");
if (EFI_ERROR(Status)) {
Print(L"ERROR: Enumerate.\n");
Print(L"Status: %x\n", (int)Status);
Print(L"HandleCount: %x\n", HandleCount);
Print(L"HandleBuffer: %x\n", HandleBuffer);
FreePool(HandleBuffer);
return Status;
}
Print(L"Enumeration complete\nGetting Bus frequency\n");
Status = enumerateI2c->GetBusFrequency(enumerateI2c, i2cDescriptor->I2cBusConfiguration, freq);
if (EFI_ERROR(Status)) {
Print(L"ERROR: GetBusFrequency.\n");
Print(L"Status: %x\n", (int)Status);
FreePool(HandleBuffer);
return Status;
}
Print(L"Found Frequency:\n");
Print(L"%d\n", (CHAR16*)freq);
}
FreePool(HandleBuffer);
return EFI_SUCCESS;
}发布于 2022-09-12 06:59:17
并非每个UEFI固件都支持所有UEFI功能和驱动程序。试着在不同的硬件上运行这个应用程序,看看它们是否支持协议。
遗憾的是,如果协议不存在,您有两种选择:
中所写内容的人。
https://stackoverflow.com/questions/72790664
复制相似问题