如何确定 ACPI 计时器的端口 I/O 地址

How to Decide Port I/O Address of ACPI Timer

根据OSDev,定位到ACPI定时器的端口I/O地址,我们首先打开FADTtable,查看条目PM Timer Block LengthPM Timer Block Address .在我的电脑中,PM Timer Block Address 给出地址 0x408 并且它工作正常。

然而,在OVMF的实现中,ACPI定时器的I/O地址被计算为PMBA + 0x8。我在网上搜索了一下,没有找到关于这种计算方式的资料。

我想知道这两种确定 ACPI 计时器地址的方法是否正确?如果两者都正确,我在哪里可以找到关于第二种计算方式的信息定义?

固件(例如 OVMF)使用芯片组特定方法来确定 ACPI 计时器的 IO 端口;然后构造 FADT 并填充它,以便 OS 不需要特定于芯片组。

如果你不想使用FADT,那么你可以为每个芯片组编写一个芯片组特定的驱动程序。对于某些情况(开源模拟器),这可能相对容易,而对于某些情况(专有和未记录的真实硬件),这几乎是不可能的。