意识到我不是在问 MMIO(内存映射输入/输出)是如何设置的,而是问它是如何映射的,即它究竟是什么映射的?不是什么映射到什么,我可以谷歌一个内存映射。
我想知道的是,例如,一旦您第一次打开计算机电源,究竟是什么“映射”了内存,或者它是如何工作的?
基本上,是什么为某些目的设置内存或“映射”它?
我最初以为它是引导固件,如 BIOS 或 EFI/UEFI,但另一个站点上的另一个用户告诉我它与内存控制器有关。真的吗?
但是如何,如果更详细,如果不是太多要问?非常感谢任何澄清!
Dav*_*rtz 12
有几个步骤。首先,BIOS 会发现系统上的所有设备。然后它询问每个设备以决定 BIOS 是否会设置该设备,如果是,则确定设备需要多少内存地址空间(如果有)。然后 BIOS 通过写入其 BAR(基地址寄存器)为每个设备和程序的地址解码器分配空间。
总之,BIOS:
发现设备的 BAR(基址寄存器)。每个设备最多可以有六个 BAR。
对于每个 BAR,询问 BAR 它需要多少地址空间。
为 BAR 分配一块地址空间。
使用所选内存地址空间块的基地址对 BAR 进行编程。
设备的地址解码器现在响应该地址空间块内的读取和写入。从那时起,当 CPU(或系统中具有 DMA 功能的任何设备)读取或写入该范围内的任何地址时,设备将响应请求。
请注意,没有为设备分配内存。内存在设备上。它是分配给设备的内存地址空间。
当然,您可以在 Wikipedia 的PCI 配置空间页面上找到详细的过程。
| 归档时间: |
|
| 查看次数: |
12605 次 |
| 最近记录: |