什么是 PCI 地址空间?

Usr*_*sr1 1 memory-mapping pci pci-e

例如,假设 PCIe 端点请求 1 MB (MMIO) 内存,BIOS 在枚举过程中将其映射到系统内存映射(内存地址空间)。

因此,每当 CPU 访问该内存区域时,它将被定向到端点设备。我是 PCIe 新手,这是我对如何使用 MMIO(来自系统内存映射)定位 PCIe 设备的理解。

我在某处读到 PCIe 总线使用 PCI 地址空间。那么 PCI 地址空间到底在这个过程中发挥什么作用呢?PCI 地址空间存在于哪里?

举例说明会更有帮助。

prl*_*prl 5

PCI 支持 3 个地址空间:
1. PCI 配置空间
2. I/O 空间
3. MMIO 空间

访问每个地址空间的方法取决于 PCI 总线所连接的系统。

在 x86 系统上,CPU 使用编程到设备 BAR 中的相同物理地址直接访问 PCI MMIO。在这种情况下,PCI 地址空间与CPU 物理地址空间相匹配。

x86 系统上的 PCI 配置空间可以通过软件通过以下两种方式访问​​:
1. 将 PCI 配置空间寄存器地址写入 I/O 端口 0cf8h,并使用 I/O 端口 0cfch 读取或写入寄存器值。
2. 在任何最新的系统上,通过使用直接 MMIO 到特定于平台的地址。在这种情况下,PCI寄存器地址被添加到MMIO区域的基址上以形成CPU使用的物理地址。

在其他类型的系统上,访问每个 PCI 地址空间的方法可能不同。例如,CPU 可能需要使用 CPU 物理地址空间中的间隙来访问 PCI MMIO 空间,类似于 x86 系统上 PCI 配置空间访问的方式。在这样的系统上,PCI 地址空间与CPU 物理地址空间不同。