linux - tag - Comprensión de los grupos de segmentos, bus, dispositivo y números de función de SMBIOS
puddletag (1)
Puede encontrar útil el comando lspci
. Aquí hay una salida de muestra:
# 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]
Objetivo
Estoy tratando de averiguar en qué ranura física está conectado un dispositivo PCIe particular. La premisa es que tengo el ID de PCI de una tarjeta que seguramente ocupa una ranura y la solución sería averiguar cuál.
Tenga en cuenta que solo me interesa trabajar en el bus PCI Express, aunque creo que el proceso de identificación / enumeración del dispositivo es el mismo que el antiguo PCI.
Intento
El SMBIOS contiene información sobre las ranuras de la placa base disponibles. Es posible examinar esta información desde la línea de comandos de 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
Sin embargo, no puedo encontrar ningún dispositivo en el bus PCI ( lspci
) que tenga un ID de PCI de 0000:03:02.0
, 0000:04:02.2
o 0000:05:03.0
. Lo que sé por inspección manual es lo siguiente:
- La tarjeta
0000:03:00.0
está en la primera ranura. El puente PCI parece ser0000:00:02.0
- La tarjeta
0000:04:00.0
está en la segunda ranura. El puente PCI parece ser0000:00:02.2
- La tarjeta
0000:05:00.0
está en la tercera ranura. El puente PCI parece ser0000:00:03.0
Así que aquí surge un patrón. Desde la estructura de SMBIOS, el número de bus es el que se le da a la tarjeta que está conectada, pero los números de dispositivo / función son los mismos que el puente PCI correspondiente.
¿Es este patrón solo una coincidencia en mi placa base o hay una razón detrás? Es una placa base de Asus, con una BIOS AMI. He leído que algunas BIOS no proporcionan información precisa sobre sus ranuras, por lo que me gustaría saber cuánta generalidad puedo lograr.
Cualquier sugerencia o puntero a la documentación de referencia también es muy apreciado.