如何确定 ACPI 计时器的端口 I/O 地址
How to Decide Port I/O Address of ACPI Timer
根据OSDev,定位到ACPI定时器的端口I/O地址,我们首先打开FADTtable,查看条目PM Timer Block Length
和PM Timer Block Address
.在我的电脑中,PM Timer Block Address
给出地址 0x408
并且它工作正常。
然而,在OVMF的实现中,ACPI定时器的I/O地址被计算为PMBA + 0x8
。我在网上搜索了一下,没有找到关于这种计算方式的资料。
我想知道这两种确定 ACPI 计时器地址的方法是否正确?如果两者都正确,我在哪里可以找到关于第二种计算方式的信息定义?
固件(例如 OVMF)使用芯片组特定方法来确定 ACPI 计时器的 IO 端口;然后构造 FADT 并填充它,以便 OS 不需要特定于芯片组。
如果你不想使用FADT,那么你可以为每个芯片组编写一个芯片组特定的驱动程序。对于某些情况(开源模拟器),这可能相对容易,而对于某些情况(专有和未记录的真实硬件),这几乎是不可能的。
根据OSDev,定位到ACPI定时器的端口I/O地址,我们首先打开FADTtable,查看条目PM Timer Block Length
和PM Timer Block Address
.在我的电脑中,PM Timer Block Address
给出地址 0x408
并且它工作正常。
然而,在OVMF的实现中,ACPI定时器的I/O地址被计算为PMBA + 0x8
。我在网上搜索了一下,没有找到关于这种计算方式的资料。
我想知道这两种确定 ACPI 计时器地址的方法是否正确?如果两者都正确,我在哪里可以找到关于第二种计算方式的信息定义?
固件(例如 OVMF)使用芯片组特定方法来确定 ACPI 计时器的 IO 端口;然后构造 FADT 并填充它,以便 OS 不需要特定于芯片组。
如果你不想使用FADT,那么你可以为每个芯片组编写一个芯片组特定的驱动程序。对于某些情况(开源模拟器),这可能相对容易,而对于某些情况(专有和未记录的真实硬件),这几乎是不可能的。