如何在不知道EFI系统表的情况下找到MCFG表?

时间:2018-08-15 08:07:25

标签: linux bios esxi uefi

我正在使用特殊的操作系统(VMWare ESXi,这是一个基于Linux的封闭源操作系统),所以我需要获取MCFG表的物理地址。由于API非常有限,因此我只能映射物理地址,而无法从OS获取EFI系统表或任何其他ACPI表的基地址。

那么有什么方法可以在不知道EFI系统表的情况下找到MCFG表吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

在非EFI系统上,软件通过在内存中搜索签名来找到RSDP。参见http://uefi.org/sites/default/files/resources/ACPI_6_2.pdf#page169第5.2.5.1。节。

尽管EFI不支持此方法,但您的平台固件仍有可能将ACPI表放置在可以使用该方法找到的位置。

否则,您将不得不找出一种从ESXi获取RSDP或XSDT的方法,这可能需要进行一些逆向工程。

对于要编写什么软件以及该软件如何适合引导流程,您并没有过多说-ESXi可能已经消耗了ACPI表并在控制软件之前重新使用了内存。在这种情况下,您将真的很走运。

答案 1 :(得分:0)

dmesg | grep RSDP将为您提供RSDP物理地址。注意RSDP地址只能在UEFI Shell中以编程方式检索。解析以上命令的输出,使用vmk_UserMap API将物理地址空间映射到userworld进程的地址空间,然后从那里获取XSDT,然后从那里获取MCFG。

如果您对从RSDP-> XSDT表访问MCFG不感兴趣,则可以直接运行dmesg |。您的虚拟机管理程序上的grep MCFG也是如此。