为什么PCIe设备需要BAR?

时间:2018-07-05 05:34:50

标签: pci pci-e

我试图弄清楚PCIe设备的寻址。我不明白为什么PCIe设备需要具有BAR。写入PCIe端点BAR的地址与映射到物理地址空间完全无关,这种映射是在路由地址的PCH / NB / Memory控制器中完成的,而该地址与任何PCIe端点设备BAR完全无关。

在原始PCI中,我知道所有设备都在同一共享总线上。您将在北桥中编程一个地址范围,该地址范围会将所有事务路由到PCI总线上,该总线上的所有设备都可以看到。因此,设备需要某种方式来知道是否进行了交易。必须告知他们分配给他们的地址范围,从而使用BAR。很好,知道了。

但是在PCIe中,没有总线共享。因此,每个设备只能接收原本应该接收的数据包,并且不在乎其地址范围是多少。因此它不需要BAR。

另一个常见的答案是您阅读BAR来知道设备的映射位置。但这没有任何意义,我的固件或操作系统首先将这些设备映射到某个位置,然后将该地址写入BAR。我为什么需要回到那里得到它?它应该保存在某个地方。

关于映射缺少的需要BAR的地址是否有更深的了解?

1 个答案:

答案 0 :(得分:2)

我认为答案最好用https://en.wikipedia.org/wiki/PCI_Express的这一行来概括:

  

在软件级别,PCI Express保留了与PCI的向后兼容性;尽管无法获得新的PCI Express功能,但是传统的PCI系统软件可以在无需显式支持PCI Express标准的情况下检测和配置较新的PCI Express设备。

预计较旧的驱动程序必须访问BAR,因此PCIe设备需要BAR才能访问!