Ide bios将控制转移到AHCI扩展ROM时的内存模型?

Ide bios将控制转移到AHCI扩展ROM时的内存模型?,ide,storage,bios,memory-mapping,sata,Ide,Storage,Bios,Memory Mapping,Sata,据我所知,AHCI扩展ROM使用IDP(索引/数据对)访问AHCI寄存器(全局和端口寄存器) ahci规范v1.3规定: IDP机制允许主机软件访问所有MMIO 使用间接I/O寻址的寄存器 因此,即使ABAR高于1MB,扩展ROM仍然可以通过这种方式以实模式访问MMIO 但我们在下面的扩展中发现,当访问AHCI MMIO寄存器时,这种方式是正常的: push 0000h pop es ; set es = 0 mov bx, F732h shl ebx, 16 mov bx, 0

据我所知,AHCI扩展ROM使用IDP(索引/数据对)访问AHCI寄存器(全局和端口寄存器)

ahci规范v1.3规定:

IDP机制允许主机软件访问所有MMIO 使用间接I/O寻址的寄存器

因此,即使ABAR高于1MB,扩展ROM仍然可以通过这种方式以实模式访问MMIO

但我们在下面的扩展中发现,当访问AHCI MMIO寄存器时,这种方式是正常的:

push 0000h
pop es         ; set es = 0
mov bx, F732h
shl ebx, 16
mov bx, 0000h  ; put ABAR to ebx register
mov eax, es:[ebx]  ; read AHCI CAP registers to eax(4byte)
如果上面的是确定的,那么它意味着内存模型现在不是实模式(我猜它是大实模式,也就是说,4G下的访问是确定的)

我们的问题是,当BIOS将控制权转移到扩展时,现在的内存模型是否是大实模式(无论如何,不是实模式)?如果是,则我们始终可以使用内存操作访问AHCI的MMIO。。。这是正确的吗

  • 以前使用IDP的原因可能是:当控制权传递给扩展时,仍然是实模式,对吗?所以内存模型依赖于系统BIOS,对吗
当BIOS以大实数模式将控制权转移到扩展ROM时,内存模型是什么不总是。

一般来说,系统可能处于大实数模式,但如果您正在开发一个在任意BIOS上运行的ROM,这不是一个安全的假设!如果BIOS支持PMM(后期内存管理器),则系统应处于大实模式,否则无法保证这一点。据我所知,即使BIOS支持PMM,也只能保证初始选项ROM执行处于大实数模式

可能更安全的做法是:

  • 仅对AHCI寄存器使用传统I/O访问(这也是最简单的)
  • 首先检查BIOS是否支持PMM,然后使用传统I/O或MMIO(但仅在BIOS选项ROM init期间)
  • 继续,将CPU置于大实数模式,并使用MMIO访问这些寄存器(为了获得额外积分,您可以将系统恢复到您发现它的状态,但大多数BIOS将在您之后清理)
以前使用IDP的原因可能是:当控制权传递给扩展时,仍然是实模式,对吗不完全正确。

这很可能是因为它是最安全、最简单的选择,因为无法保证系统将处于大实模式(因此使用1MB以上的MMIO访问是安全的)

所以内存模型依赖于系统BIOS,对吗否(带有警告)。

当BIOS将控制权交给引导加载程序或选项ROM时,系统应处于实模式。大实数模式基本上是此模式的扩展,但BIOS不会将系统置于其他模式(任何保护模式、长模式等)


链接:





一个简短的免责声明:这实际上只适用于传统BIOS或具有传统支持的UEFI。如果有任何错误,我提前道歉