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

toiithl6  于 2023-03-01  发布在  Linux
关注(0)|答案(3)|浏览(282)

在Linux中,有没有办法找出哪个PCI卡插入了哪个PCI插槽?
/sys/bus/pci/devices/包含许多不是卡的设备(网桥、CPU通道等),我无法在设备目录中找到有关插槽卡Map的任何信息。

uqxowvwt

uqxowvwt1#

您可以使用

dmidecode –t slot

查找所有可用的pci插槽比你可以运行

lspci -s <slot number>

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

xbp102n0

xbp102n02#

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 NIC(您可以看到它有2个端口),插槽2有一个光纤通道卡(它也恰好有2个端口),最后插槽3是空的。
服务器中有三个物理插槽,一个是空的,两个插有多端口卡(一个HBA和一个NIC)。
为了回答你在评论中的问题,你有3个插槽是由dmidecode指示的,它们很可能填充了多端口接口卡。

xwbd5t1u

xwbd5t1u3#

在我的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

希望这个有用?

相关问题