在阅读了有关PCIe的内容之后,我介绍了PCI兼容的配置标头,在了解了标头之后,便有了基地址寄存器(BAR)字段。每个PCIe端点中总共有6个BAR。为什么有6个BAR,而不仅仅是2个(在32位地址的情况下为1,在64位情况的情况下为2)。我的意思是所有BAR的详细功能是什么?
答案 0 :(得分:3)
BAR的使用因设备而异。它们用于设备控制操作(这是通常的情况)或用于与设备之间的数据传输。之所以有六个插槽,是为了允许设备出于不同目的提供不同的区域。另外,由于该接口支持64位地址空间,因此提供其中之一需要一个64位BAR(需要两个连续的32位插槽)来配置基址。
在Intel i350 Ethernet Controller的数据表中可以看到BAR使用的一个示例。请参阅第9.4.11节。该设备中有3个BAR:一个用于内存映射设备配置(并访问FLASH设备),一个用于通过I / O地址空间配置设备,另一个用于配置MSI-X中断向量。
其他设备可能具有一个BAR或五个BAR(如果该设备是桥接器,则没有BAR)。如果您正在运行linux,请尝试在系统上使用sudo lspci -vv
,以观察设备之间的差异。