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

Linux 如何在不知道EFI系统表的情况下查找MCFG表?,linux,bios,esxi,uefi,Linux,Bios,Esxi,Uefi,我正在开发一个特殊的操作系统(VMWare ESXi,一个基于linux的封闭源代码操作系统),需要获取MCFG表的物理地址。由于API非常有限,我只能映射物理地址,但无法从操作系统获取EFI系统表或任何其他ACPI表的基址 那么,在不知道EFI系统表的情况下,有没有办法找到MCFG表呢 谢谢。在非EFI系统上,软件通过在内存中搜索其签名来查找RSDP。见第5.2.5.1节 尽管EFI不支持此方法,但您的平台固件仍可能将ACPI表放在可以使用该方法找到它们的位置 如果没有,您必须找到从ESXi获

我正在开发一个特殊的操作系统(VMWare ESXi,一个基于linux的封闭源代码操作系统),需要获取MCFG表的物理地址。由于API非常有限,我只能映射物理地址,但无法从操作系统获取EFI系统表或任何其他ACPI表的基址

那么,在不知道EFI系统表的情况下,有没有办法找到MCFG表呢


谢谢。

在非EFI系统上,软件通过在内存中搜索其签名来查找RSDP。见第5.2.5.1节

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

如果没有,您必须找到从ESXi获取RSDP或XSDT的方法,这可能需要一些反向工程


您没有说太多您正在编写的软件以及如何将其融入引导流——有可能ESXi在您的软件得到控制之前已经消耗了ACPI表并重用了内存。在这种情况下,你真的会倒霉。

dmesg | grep RSDP会给你RSDP的物理地址。注意:RSDP地址只能在UEFI外壳内以编程方式检索。解析上述命令的输出,使用vmk_UserMap api将物理地址空间映射到userworld进程的地址空间,从那里获得XSDT,然后从那里获得MCFG


如果您对从RSDP->XSDT表访问MCFG不感兴趣,那么您也可以在虚拟机监控程序上直接运行dmesg | grep MCFG。

。。。一个看起来基于linux的封闭源操作系统),…
IMHO这与GPL2@wildplasser:这与问题的确切程度有关?是的,我想是的。如果OP违反了GPL,我们至少不应该帮助他/她。