我正在使用特殊的操作系统(VMWare ESXi,这是一个基于Linux的封闭源操作系统),所以我需要获取MCFG表的物理地址。由于API非常有限,因此我只能映射物理地址,而无法从OS获取EFI系统表或任何其他ACPI表的基地址。
那么有什么方法可以在不知道EFI系统表的情况下找到MCFG表吗?
谢谢。
答案 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也是如此。