目的
我正在尝试以编程方式找出特定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没有提供关于它们的插槽的准确信息,所以我想知道我能实现多少通用性。
引用文件的任何提示或指针也不胜感激。