ルートブリッジから始めてPCIデバイスをスキャンする

ルートブリッジから始めてPCIデバイスをスキャンする

私は現在linux / pci.hに関連付けられているすべてのファイルからPCI(読み取り専用)を安全にスキャンし、デバイスが一致したときにpci_slotを選択する方法を見つけるために多くの時間を費やしました。

ただし、検索を開始できるルートブリッジやルートノードがないため、検索を開始することもできません。 (検索はできるだけ一般的でなければなりません。すべてカーネルモジュールで行われます。)

子供/親をさらに検索する機能の開始点が必要であることがわかりました。しかし、スロットを追加したり登録したくない(例:pci_scan_bus()関数で実行 - >https://elixir.bootlin.com/linux/v5.5.5/source/drivers/pci/probe.c#L3085)。 Linux Device Driversの本で述べたように、従来の方法ではPCIバスを検索する方法はありません。

ルートノードに到達するには、仮想デバイス/スロットを登録してからPCIバスのツリー全体を再確認する必要がありますか? 2004年のkernel.org文書にも、カーネルがpciバスを管理する方法に関するいくつかのメカニズムに関する重要な情報が欠けています。

すべての答えに感謝します:)

ベストアンサー1

いくつかのlspciヘルプを詳しく見た後、これが見つかりました。

pci_find_bus(0x0, 0x0); //_pci_host_bridge(&(res_bus->dev)) のホストバスでなければなりません。

子供のリストが他のデバイスにロードされているようです。 :) おそらく、これは将来的に誰かに役立つでしょう。

おすすめ記事