我有一个设备的pci地址,需要找到它的主机桥的pci地址。在FreeBSD 11中,使用" devinfo -v"很容易做到这一点。因为您可以grep设备的pci地址,然后您可以在作为主桥的树中找到它的父级。现在在FreeBSD 10中," devinfo -v"的输出中没有任何pci地址。 " devinfo -v"的示例FreeBSD 11中的输出:
pcib4 pnpinfo vendor=0x8086 device=0x2f08 subvendor=0x15d9 subdevice=0x0833 class=0x060400 at pci0:0:3:0 handle=\_SB_.PCI0.BR3A
pci4
mlx5_core1 pnpinfo vendor=0x15b3 device=0x1013 subvendor=0x15b3 subdevice=0x0010 class=0x020700 at pci0:3:0:0 handle=\_SB_.PCI0.BR3A.H000
mlx5_core2 pnpinfo vendor=0x15b3 device=0x1013 subvendor=0x15b3 subdevice=0x0010 class=0x020700 at pci0:3:0:1 handle=\_SB_.PCI0.BR3A.H001
" devinfo -v" FreeBSD 10中的输出:
pcib4 pnpinfo vendor=0x8086 device=0x2f08 subvendor=0x15d9 subdevice=0x0833 class=0x060400
pci4
mlx5_core1 pnpinfo vendor=0x15b3 device=0x1013 subvendor=0x15b3 subdevice=0x0010 class=0x020700
mlx5_core2 pnpinfo vendor=0x15b3 device=0x1013 subvendor=0x15b3 subdevice=0x0010 class=0x020700
所以你可以看到pci地址没有出现在FreeBSD10的输出中
答案 0 :(得分:0)
有两步解决方法。首先找到设备名称:
pciconf -l -v | grep "pci0:2:0:0" | cut -f 1 -d @
就我而言,它是sdhci_pci0。
然后在devinfo中找到位置:
$ devinfo | grep -B 5 sdhci_pci0
pcm2
pcm3
pcm4
pcib1
pci2
sdhci_pci0
注意: 在FreeBSD10.2-STABLE上,我可以在devinfo的输出中看到PCI信息。
答案 1 :(得分:0)
另一种可能性是遍历dev
sysctl树:
您可以在%location
OID中找到您的PCI地址:
$ sysctl dev | grep %location
dev.hdac.1.%location: pci0:0:27:0 handle=\_SB_.PCI0.HDEF
dev.hdac.0.%location: pci0:2:0:1
dev.vgapci.0.%location: pci0:2:0:0 handle=\_SB_.PCI0.PEG3.MXM3
dev.hostb.15.%location: pci0:255:5:3
dev.hostb.14.%location: pci0:255:5:2
然后,您可以使用%父OID查找父级。例如,pci0:2:0:0
的父级(在上面的示例中列出)是pci1
:
$ sysctl dev.vgapci.0.%parent
dev.vgapci.0.%parent: pci1
父级有自己的sysctl树:
$ sysctl dev.pcib.1.%location
dev.pcib.1.%location: pci0:0:3:0 handle=\_SB_.PCI0.PEG3
不是最简单的方法,但它应该适用于不同版本的FreeBSD(可能还有DragonFlyBSD FWIW)。
答案 2 :(得分:0)
尝试devinfo -rv
。
FreeBSD 10.3上的输出片段:
atapci1 pnpinfo vendor=0x8086 device=0x27c0 subvendor=0x1043 subdevice=0x8179 class=0x01018f at p
ci0:0:31:2 handle=\_SB_.PCI0.IDE1
Interrupt request lines:
0x13
I/O ports:
0xb880-0xb88f
0xbc00-0xbc03
0xc000-0xc007
0xc080-0xc083
0xc400-0xc407
ata2 at channel=0
ata3 at channel=1