客观的
我正在尝试以编程方式找出特定 PCIe 设备连接在哪个物理插槽上。前提是我有一张卡的 PCI-ID,它肯定占用了一个插槽,解决方案是找出哪个卡。
请注意,我只对在 PCI Express 总线上工作感兴趣,尽管我认为设备识别/枚举过程与旧 PCI 相同。
试图
SMBIOS包含有关可用主板插槽的信息。可以从 linux 命令行检查此信息:
$ sudo dmidecode -t slot
# dmidecode 2.11
SMBIOS 2.7 present.
Handle 0x003A, DMI type 9, 17 bytes
System Slot Information
Designation: PCIEX16_1
Type: x16 PCI Express x16
Current Usage: In Use
Length: Short
ID: 1
Characteristics:
3.3 V is provided
Opening is shared
PME signal is supported
Bus Address: 0000:03:02.0
Handle 0x003B, DMI type 9, 17 bytes
System Slot Information
Designation: PCIEX16_2
Type: x8 PCI Express x8
Current Usage: In Use
Length: Short
ID: 2
Characteristics:
3.3 V is provided
Opening is shared
PME signal is supported
Bus Address: 0000:04:02.2
Handle 0x003C, DMI type 9, 17 bytes
System Slot Information
Designation: PCIEX16_3
Type: x16 PCI Express x16
Current Usage: In Use
Length: Short
ID: 3
Characteristics:
3.3 V is provided
Opening is shared
PME signal is supported
Bus Address: 0000:05:03.0
但是,我在 PCI 总线 ( ) 中找不到任何lspci
具有 PCI ID或0000:03:02.0
的设备。我通过人工检查所知道的如下:0000:04:02.2
0000:05:03.0
- 卡
0000:03:00.0
在第一个插槽中。PCI桥似乎是0000:00:02.0
- 卡
0000:04:00.0
在第二个插槽中。PCI桥似乎是0000:00:02.2
- 卡
0000:05:00.0
在第三个插槽中。PCI桥似乎是0000:00:03.0
所以这里出现了一个模式。从 SMBIOS 结构来看,总线编号是给插入的卡的编号,但设备/功能编号与对应的 PCI 桥接器相同。
这种模式只是我主板上的巧合还是背后有原因?它是华硕主板,带有 AMI BIOS。我读过一些 BIOS 没有提供有关其插槽的准确信息,所以我想知道我能达到多少通用性。
任何指向参考文档的提示或指针也非常感谢。