为什么 PCIe 端点中有 6 个基址寄存器 (BAR)?

Rah*_*ole 2 base-address pci pci-e

在阅读了一些关于 PCIe 的内容后,我找到了 PCI 兼容的配置头文件,在了解了头文件后,有基地址寄存器(BAR)字段。每个 PCIe 端点共有 6 个 BAR。为什么有 6 个 BAR 而不仅仅是 2 个(在 32 位地址的情况下为 1,在 64 位的情况下为 2)。我的意思是所有 BAR 的详细功能是什么? PCI Express PCI 兼容配置接头

Gil*_*ton 5

BAR 的使用因设备而异。它们用于设备控制操作(这是通常的情况)或用于与设备之间的数据传输。之所以有六个插槽,是为了让设备为不同的目的提供不同的区域。此外,由于接口支持 64 位地址空间,提供其中之一需要 64 位 BAR(需要两个连续的 32 位插槽)来配置基地址。

英特尔 i350 以太网控制器的数据表中可以看到 BAR 使用的一个示例。见第 9.4.11 节。此设备中有 3 个 BAR:一个用于内存映射设备配置(和访问 FLASH 设备),一个用于通过 I/O 地址空间的设备配置,一个用于配置 MSI-X 中断向量。

其他设备可能有一个或五个 BAR(如果设备是网桥,则没有)。如果您运行的是 linux,请尝试sudo lspci -vv在您的系统上观察设备之间的差异。