Задача
Я пытаюсь программно выяснить, к какому физическому разъему подключено конкретное устройство 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.
Это просто случайность в моей материнской плате или есть логическое обоснование? Это материнская плата Asus с AMI BIOS. Я читал, что некоторые BIOS не предоставляют точную информацию о своих слотах, поэтому я хотел бы знать, насколько много общего я могу достичь.
Любая подсказка или указатель на справочную документацию также приветствуется.