重庆网络推广网站推广,兰州网站程序建设,谷歌推广网站建设,超炫网站一、概述
在 UEFI 系统表中#xff0c;有几个关键的表用于提供系统信息、服务和硬件抽象。这些表可以通过 EFI_SYSTEM_TABLE 访问#xff0c;常见的 UEFI 系统表如下#xff1a;
1、EFI_SYSTEM_TABLE (系统表)
EFI_SYSTEM_TABLE 是一个指针#xff0c;包含多个服务和系统…一、概述
在 UEFI 系统表中有几个关键的表用于提供系统信息、服务和硬件抽象。这些表可以通过 EFI_SYSTEM_TABLE 访问常见的 UEFI 系统表如下
1、EFI_SYSTEM_TABLE (系统表)
EFI_SYSTEM_TABLE 是一个指针包含多个服务和系统信息。 包含以下几个重要表
2、EFI_BOOT_SERVICES (引导服务表)
提供在引导期间可用的功能如内存分配、事件管理、协议处理等。
3、EFI_RUNTIME_SERVICES (运行时服务表)
提供操作系统加载后仍可使用的服务如变量管理、时间功能和固件更新等。
4、EFI_CONFIGURATION_TABLE (配置表)
包含各种硬件信息和平台信息包含 ACPI、SMBIOS、HOBHand-off Block等表。
二、遍历ACPI表 VOID ListAllAcpiTables(VOID)
{UINTN i, j, EntryCount;CHAR8 strBuff[20];UINT64 *EntryPtr;EFI_GUID AcpiTableGuid ACPI_TABLE_GUID;EFI_GUID Acpi2TableGuid EFI_ACPI_TABLE_GUID;EFI_CONFIGURATION_TABLE *configTab NULL; EFI_ACPI_DESCRIPTION_HEADER *XSDT, *Entry;EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Root;Print(LList All ACPI Tables:\n);configTab gST-ConfigurationTable;for (i 0; i gST-NumberOfTableEntries; i) { // Step1: 查找 ACPI 表if ((CompareGuid(configTab-VendorGuid, AcpiTableGuid) 0) ||(CompareGuid(configTab-VendorGuid, Acpi2TableGuid) 0)) { Print(LFound ACPI table: %g\n, configTab-VendorGuid); Root configTab-VendorTable;Print(LROOT SYSTEM DESCRIPTION [0x%p]\n, Root);// Step2: 检查修订版本只接受修订版本 2if (Root-Revision EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION) {// Step3: 获取 XSDT 表地址XSDT (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN) Root-XsdtAddress;EntryCount (XSDT-Length - sizeof(EFI_ACPI_DESCRIPTION_HEADER)) / sizeof(UINT64);Print(LXSDT address [0x%p]\n, XSDT);Print(LXSDT-Length 0x%x\n, XSDT-Length);Print(LNumber of ACPI Tables %d\n, EntryCount);// Step4: 遍历每个 ACPI 表并输出信息EntryPtr (UINT64 *)(XSDT 1);for (j 0; j EntryCount; j, EntryPtr) {Entry (EFI_ACPI_DESCRIPTION_HEADER *)((UINTN)(*EntryPtr));// 输出每个表的签名、长度和校验和等基本信息ZeroMem(strBuff, sizeof(strBuff));CopyMem(strBuff, (Entry-Signature), sizeof(UINT32));Print(LTable Signature: %a\n, strBuff);Print(LTable Address: 0x%p\n, Entry);Print(LTable Length: 0x%x\n, Entry-Length);Print(LTable Checksum: 0x%x\n, Entry-Checksum);}}}configTab;}
}
整个函数 ListAllAcpiTables 的逻辑是
1遍历系统配置表。 2) 查找 ACPI 表并验证 RSDP 的版本。 3) 从 RSDP 获取 XSDT 表的地址并计算其中的 ACPI 表数量。 4) 遍历所有 ACPI 表打印它们的基本信息