使用PCI配置空间识别PCIe设备



给定系统中安装的PCI设备列表,我需要识别PCIe设备。到目前为止,我一直在对功能列表进行迭代,以查看设备是否具有扩展的帽结构(这将对应于帽ID 0x10)。而且,如果该设备具有扩展的帽结构,那么它肯定是PCIe设备。然而,这种方法似乎无法识别某些设备。我想知道是否有人知道更好的方法。

谢谢。

我使用以下方式检索PCIe设备:

  1. 检查PCI设备配置寄存器0x6 bit4 = 1(能力列表存在状态)?
  2. 检查PCI设备配置寄存器0x34 != 0(能力指针有效)?
  3. 检查PCIe能力(ID = 0x10)是否存在?

如果以上都是真的,那么这个设备是一个PCIe设备!!

我很好奇"this method fail to identify some devices"的情况?

PCI/PCIE设备扫描,在能力指针中可能有冗余地址(PCI配置空间损坏)

请检查所有B:D:F组合中的能力指针值是否有冗余,如果您发现任何问题,您可以直接联系您的BIOS供应商得到纠正。

最新更新