Понимание групп сегментов, шин, устройств и номеров функций от SMBIOS

Задача

Я пытаюсь программно выяснить, к какому физическому разъему подключено конкретное устройство 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. Что я знаю при ручной проверке, так это:

  1. Карта 0000:03:00.0 находится в первом слоте. Мост PCI выглядит как 0000:00:02.0
  2. Карта 0000:04:00.0 находится во втором слоте. Мост PCI выглядит как 0000:00:02.2
  3. Карта 0000:05:00.0 находится в третьем слоте. Мост PCI выглядит как 0000:00:03.0

Таким образом, здесь возникает закономерность. Из структуры SMBIOS номер шины - это номер шины, который подключен, но номера устройств/функций такие же, как у соответствующего моста PCI.

Это просто случайность в моей материнской плате или есть логическое обоснование? Это материнская плата Asus с AMI BIOS. Я читал, что некоторые BIOS не предоставляют точную информацию о своих слотах, поэтому я хотел бы знать, насколько много общего я могу достичь.

Любая подсказка или указатель на справочную документацию также приветствуется.

Ответы

Ответ 1

Вы можете найти команду lspci полезной. Здесь пример вывода:

# lspci -v -t
-[0000:00]-+-00.0  Intel Corporation 5500 I/O Hub to ESI Port
           +-01.0-[01]--+-00.0  Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet
           |            \-00.1  Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet
           +-03.0-[02]--+-00.0  Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet
           |            \-00.1  Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet
           +-07.0-[04]----00.0  LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator]
           +-09.0-[05]----00.0  LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator]
           +-14.0  Intel Corporation 7500/5520/5500/X58 I/O Hub System Management Registers
           +-14.1  Intel Corporation 7500/5520/5500/X58 I/O Hub GPIO and Scratch Pad Registers
           +-14.2  Intel Corporation 7500/5520/5500/X58 I/O Hub Control Status and RAS Registers
           +-1a.0  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4
           +-1a.1  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5
           +-1a.7  Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2
           +-1c.0-[03]----00.0  LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator]
           +-1d.0  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1
           +-1d.1  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2
           +-1d.7  Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1
           +-1e.0-[06]----03.0  Matrox Electronics Systems Ltd. MGA G200eW WPCM450
           +-1f.0  Intel Corporation 82801IB (ICH9) LPC Interface Controller
           \-1f.2  Intel Corporation 82801IB (ICH9) 2 port SATA Controller [IDE mode]