lspci
petalinuxでは実装されていません。それでは代替案がありますか?lspci
出力ファイルを読むことができますか?
答え1
文書が/proc/bus/pci/devices
役に立つかもしれません:
$ cut -f1,2,18 /proc/bus/pci/devices
0000 808627a0
0008 808627a1 pcieport
00d8 808627d8 snd_hda_intel
00e0 808627d0 pcieport
00e1 808627d2 pcieport
00e2 808627d4 pcieport
00e3 808627d6 pcieport
00e8 808627c8 uhci_hcd
00e9 808627c9 uhci_hcd
00ea 808627ca uhci_hcd
00eb 808627cb uhci_hcd
00ef 808627cc ehci_hcd
00f0 80862448
00f8 808627b9
00f9 808627df ata_piix
00fa 808627c5 ahci
00fb 808627da i801_smbus
0100 10027149 radeon
0200 8086109a e1000e
0300 80864227 iwl3945
1500 104cac56 yenta_cardbus
フォルダには/sys/bus/pci/devices
詳細が含まれていますが、より広範囲です。
答え2
sysfsファイルシステムから同様の情報を取得できます(たとえば、/sys/device/pci0000:00
下にシンボリックリンクもあります)/sys/class/pci_bus
。lspci
lspciを使用してシステムでこれを確認し、慣れることができる出力対応についていくつかの手がかりを提供するので、まずこれについて説明します。
以下は編集されたlscpi
出力です。
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller (rev 09)
00:19.0 Ethernet controller: Intel Corporation 82579V Gigabit Network Connection (rev 04)
00:1c.0 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 1 (rev c4)
00:1c.3 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 4 (rev c4)
00:1c.4 PCI bridge: Intel Corporation 82801 PCI Bridge (rev c4)
00:1c.6 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 7 (rev c4)
00:1c.7 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 8 (rev c4)
03:00.0 SATA controller: ASMedia Technology Inc. ASM1062 Serial ATA Controller (rev 01)
04:00.0 PCI bridge: ASMedia Technology Inc. ASM1083/1085 PCIe to PCI Bridge (rev 03)
06:00.0 Network controller: Qualcomm Atheros AR9485 Wireless Network Adapter (rev 01)
07:00.0 USB controller: ASMedia Technology Inc. ASM1042 SuperSpeed USB Host Controller
通知は00:1c.
0.3、.4、.6、.7、03:00.0、04:00.0、06:00.0、07:00.0です.これは当てはまります。後者は前者に接続された装置である。/sys/class/pci_bus
ノードへのシンボリックリンクは/sys/devices/pci0000:00
次のとおりです。
0000:03 -> 0000:00:1c.3
0000:04 -> 0000:00:1c.4
0000:06 -> 0000:00:1c.6
0000:07 -> 0000:00:1c.7
コンテンツに関する情報だけを望む場合、これについてあまり考える必要はありませんが、これらの対応が出力lspci
に関連する可能性が高いため、言及します。
これらのノード(ディレクトリ)内には、subsystem_device
テキスト形式の16ビット(4桁)16進コードを含むファイルがあります0x84ca
。subsystem_vendor
にも同様の16進コードがありますが、device
後者は私たちには役に立ちません(注:いいえシステムの内部ラベルであるデバイスによって提供されるデバイスID)電子は十分に具体的ではありません(しかし、まだ役に立つかもしれません。以下を参照)。
これらのコードのリストは増え続けているので、見つけるのに良い場所は次のとおりです。オンラインデータベース。例からすべてのリストを取得するには:
> find /sys/devices/pci0000:00 -name subsystem_device -exec cat '{}' \;
0x84ca
0x84ca
0x84ca
0x84ca
0x84ca
0x849c
0x84ca
0x84fb
0x84ca
0x84b7
0x84ca
0x1080
0x84ca
0x850d
0x84ca
0x8488
0x84ca
0x84ca
0x84ca
0x84ca
0x84ca
find
.0x084caは数回繰り返されます。データベースで「デバイス検索」を検索したところ、これがIntelの「450NX PCIsetメモリおよびI/Oコントローラ」であることがわかりました。このように繰り返される理由は、その中に他のものが挿入されているからです。
これらすべてを扱うことなくショートカットを使用して、私のWi-Fiコントローラが何であるかを見てみましょう。 /sys/class/net
3つのシンボリックリンクを一覧表示します。
em1
lo
wlp6so
ifconfig
出力などに使用されるタグ名に対応します。wlp6so
リンクをたどってもpci0000:00/0000:00:1c.6/0000:06:00.0/net/wlp6s0
デバイスを識別するのに役立ちません。subsystem_device
ツリーには2つのルートノードがあります。pci0000:00/0000:00:1c.6
1つ目は0x84ca
(やはりコントローラ)、もう1つはです0000:06:00.0
。0x850d
ここでは、データベースに欠落している項目があるという事実に遭遇します。追加する情報を送信できるフォームがありますが、もちろん今は役に立ちません。
「pci 0x850d」のオンライン検索が表示されます。Linuxカーネルソースコードへの参照、1はカーネルがこれらのコードを使用して適切なドライバをロードするためです。これは私たちに何かを伝えます(表面的にはASUSTEKのWi-Fiチップです)。これはsubsystem_vendor
、同じディレクトリにあるノードを見ると、別の方法で推論できます(データベースで「ベンダー検索」を実行すると、Asustekがオンラインになることがわかります)。 :) 0x1043) これがWi-Fiインターフェースを意味することを考えてみましょう。2 OEM(Original Equipment Manufacturer)がAtherosという手がかりもあります。これは、実際にはlscpi
「06:00
ネットワークコントローラ:Qualcomm Atheros AR9485ワイヤレスネットワークアダプタ(Revision 01)」と記載されているath9kドライバのソースコードであるためです。
ソースコードを見ずにlspci
文字列を取得するためにデバイスに直接問い合わせるとします。カーネルは固有のデバイスIDを使用してドライバをロードし、その情報が役に立たないため、これを行わないことがあります。
1. この結果に基づいて調べるより良い場所は、grep -R
カーネルソースツリーのディレクトリを使用することです。drivers/
見つからなければどうせドライバーもいないのです。
2. もちろん、ドライバがロードされておらず、インターフェイスが閉じられていればそれほど明確ではありませんが、IDはまだ残ります。/sys/devices/...