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

时间:2013-07-10 03:04:01

标签: ide storage bios memory-mapping sata

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

ahci spec v1.3说:

  

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

因此即使ABAR超过1MB,扩展ROM仍然可以通过这种方式访问​​MMIO in real mode

但是我们发现在访问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,对吗?

1 个答案:

答案 0 :(得分:2)

BIOS是否在大实模式下将控制权转移到扩展ROM时的内存模型? 并非总是如此。

一般情况下,系统可能处于大型实模式,但如果您正在开发一个可在任意BIOS上运行的ROM,这不是一个安全的假设!如果BIOS支持PMM(Post Memory Manager),那么系统应该处于大实模式,否则无法保证这一点。据我所知,即使BIOS支持PMM,也只保证初始选项ROM执行处于大实模式。

可能更安全:

  • 仅对AHCI寄存器使用传统I / O访问(这也是最简单的)
  • 检查BIOS是否首先支持PMM,然后使用传统I / O或MMIO(但仅限BIOS选项ROM初始化期间)
  • 继续将CPU置于大实模式并使用MMIO访问这些寄存器(对于奖励积分,您可以将系统恢复到您找到的状态,但大多数BIOS将在您之后清理)< / LI>

之前使用IDP的原因可能是:当控制权转移到扩展时仍然是实模式,对吗? 不完全。
< / p>

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

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

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


链接:

http://bioshacking.blogspot.com/2011/07/memory-management-in-legacy-bios.html
http://lists.ipxe.org/pipermail/ipxe-devel/2012-August/001736.html
http://wiki.osdev.org/Unreal_Mode
http://www.linkedin.com/groups/PCI-extension-memory-allocation-4330449.S.99498421

简短免责声明:这实际上仅适用于具有旧版支持的旧版BIOS或UEFI。如果有任何错误,我会提前道歉!