2016-03-13 28 views
0

我有一個設備的pci地址,需要找到它的hostbridge的pci地址。在FreeBSD 11中,使用「devinfo -v」很容易,因爲您可以grep設備的pci地址,然後您可以在hostbridge的樹中找到它的父節點。現在在FreeBSD 10中,「devinfo -v」的輸出中沒有任何pci地址。在FreeBSD的11 「的devinfo -v」 輸出的例子: 「發展信息-v」 輸出的FreeBSD的10在FreeBSD10中查找設備hostbridge的pci

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 

例如:

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

是否可以從兩個系統哪一部分增加的例子就是你要找的地址?我可以嘗試在我的系統上進行驗證,但由於我不熟悉PCI尋址,我不確定'devinfo -v'吐出的是什麼。 – Amiramix

回答

0

有兩步解決方法。起初找到設備名稱:

pciconf -l -v | grep "pci0:2:0:0" | cut -f 1 -d @ 

在我的情況下,它是sdhci_pci0。

然後,在發展信息找到的位置:

$ devinfo | grep -B 5 sdhci_pci0 
       pcm2 
       pcm3 
       pcm4 
     pcib1 
      pci2 
      sdhci_pci0 

注: 在FreeBSD10.2-STABLE我可以看到在發展信息的輸出PCI信息。

+0

如果模塊sdhci_pci0未加載,該怎麼辦?那麼在pciconf輸出中,您將看到「none」,因此如果沒有驅動程序連接,則無法繼續並使用devinfo –

+0

,它是「devinfo -v」的「未知」節點。但沒有驅動程序的設備沒有編號。 –

0

另一種可能性是通過dev的sysctl樹走:

  1. 您可以grep爲您在%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 
    
  2. 然後,您可以尋父使用%父母OID。例如,中pci0:2:0:0父(在上面的例子中列出)爲pci1

    $ sysctl dev.vgapci.0.%parent 
    dev.vgapci.0.%parent: pci1 
    
  3. 家長都有自己的sysctl樹:

    $ sysctl dev.pcib.1.%location 
    dev.pcib.1.%location: pci0:0:3:0 handle=\_SB_.PCI0.PEG3 
    

不是最簡單的方法,但它應該適用於不同版本的FreeBSD(也可能是DragonFlyBSD FWIW)。

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