在 Linux 中,有没有办法找出哪个 PCI 卡插入哪个 PCI 插槽?

问题描述 投票:0回答:3

在 Linux 中,有没有办法找出哪个 PCI 卡插入哪个 PCI 插槽?

/sys/bus/pci/devices/ 包含许多不是卡的设备(网桥、CPU 通道等),我无法在设备目录中找到有关插槽卡映射的任何信息。

linux pci sysfs
3个回答
28
投票

你可以使用

dmidecode –t slot

找到所有可用的 pci 插槽 比你能跑

lspci -s <slot number>

命令列出连接到指定插槽的设备。您必须从第一个命令中获取总线地址,并将此地址用作第二个命令中的参数。


7
投票

Nebojsa 的回答很好,但这里有更多信息和对 magmabyte 评论的回答。

dmidecode
给你插槽的数量,但是,这些插槽并不是唯一使用 PCI 桥的东西,这就是为什么你看到的设备比插槽多得多。

其次,您可能会看到每个插槽有多个“设备”,但它们很可能只是同一张卡上的多个端口。举个使用网络接口卡 (NIC) 的例子:

megaman@someserver $ lspci | grep 10Gb
07:00.0 Ethernet controller: Emulex Corporation OneConnect 10Gb NIC (rev 02)
07:00.1 Ethernet controller: Emulex Corporation OneConnect 10Gb NIC (rev 02)

dmidecode
表示该服务器具有三个插槽(确实如此)。插槽 1 有上面的 10Gb 网卡(你可以看到它有 2 个端口),插槽 2 有一个光纤通道卡(也恰好有 2 个端口),最后插槽 3 是空的。

服务器中有三个物理插槽,一个是空的,两个是多端口卡(一个HBA和一个NIC)。

要在评论中回答您的问题,您拥有的 3 个插槽是由

dmidecode
指示的,它们可能装有多端口接口卡。


0
投票

在我的 kickstart 中,我使用以下内容来确定用于操作系统的 NIC。例如,我们的某些服务器使用 HPE 562SFP+ 2 端口 10Gb NIC。它将是:

NICPROD=562
USENIC=''
for NIC in /sys/class/net/e*; do
   NIC=$(basename ${NIC})
   FOUNDNIC=$(lspci -s $(ethtool -i ${NIC} | awk '/bus-info/ { print $2 }' | cut -d: -f2-) -vv  | grep -E 'Product Name:')
   if [[ "${FOUNDNIC}" == *${NICPROD}* && "${FOUNDNIC}" != *"FLR"* ]]; then
      USENIC=${NIC}
      break
   fi
done

希望这有帮助吗?

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.