例如,假设PCIe端点请求1 MB(MMIO)的内存,在枚举过程中BIOS将映射到系统内存映射(内存地址空间)。所以每当cpu访问那个内存区域时,它就会被定向到终点设备。我是PCIe的新手,这是我对使用MMIO(来自系统内存映射)如何定位PCIe设备的理解。 我在某处读过PCIe总线使用pci地址空间。那么PCI地址空间究竟在这个过程中扮演什么角色呢? PCI地址空间在哪里?
使用示例进行说明会更有帮助。
先谢谢!!!
答案 0 :(得分:3)
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空间,类似于PCI配置空间访问在x86系统上工作的方式。在这样的系统上,PCI地址空间与CPU物理地址空间不同。