【发布时间】:2018-06-22 13:05:49
【问题描述】:
在阅读了一些关于 PCIe 的文章后,我找到了 PCI 兼容的配置头文件,在了解了头文件后,就有了基地址寄存器 (BAR) 字段。每个 PCIe 端点共有 6 个 BAR。为什么有 6 个 BAR 而不仅仅是 2 个(1 个在 32 位地址的情况下,2 个在 64 位的情况下)。我的意思是所有 BAR 的详细功能是什么?
【问题讨论】:
标签: pci pci-e base-address
在阅读了一些关于 PCIe 的文章后,我找到了 PCI 兼容的配置头文件,在了解了头文件后,就有了基地址寄存器 (BAR) 字段。每个 PCIe 端点共有 6 个 BAR。为什么有 6 个 BAR 而不仅仅是 2 个(1 个在 32 位地址的情况下,2 个在 64 位的情况下)。我的意思是所有 BAR 的详细功能是什么?
【问题讨论】:
标签: pci pci-e base-address
BAR 的使用因设备而异。它们要么用于设备控制操作(这是通常的情况),要么用于进出设备的数据传输。之所以有六个插槽,是为了让设备可以为不同的目的提供不同的区域。此外,由于接口支持 64 位地址空间,因此提供其中之一需要 64 位 BAR(需要两个连续的 32 位插槽)来配置基地址。
可以在Intel i350 Ethernet Controller 的数据表中看到 BAR 用法的一个示例。请参阅第 9.4.11 节。该设备中有 3 个 BAR:一个用于内存映射设备配置(以及对 FLASH 设备的访问),一个用于通过 I/O 地址空间进行设备配置,一个用于配置 MSI-X 中断向量。
其他设备可能有一个 BAR 或五个(如果设备是网桥,则没有)。如果您运行的是 linux,请在您的系统上尝试sudo lspci -vv 以观察设备之间的差异。
【讨论】: