web-dev-qa-db-ja.com

PCI / PCIeバスとデバイスは常に同じ順序で列挙されますか?

PCI/PCIeシャーシに複数の同一の(National Instruments)PCIe DAQモジュールがあり、シングルまたはデュアルシャーシコントローラーを介して接続されている状況を調査しています。最悪のシナリオでは、バス上に8つの同一のモジュールが存在する可能性があります。

PCI列挙は非決定論的である、つまり、起動から起動まで、PCIバスが同じ順序で列挙されるという保証はないと私は信じるようになりました。これは本当ですか?

これは、物理ハードウェアレイアウトが変更されていない場合でも、PCI(e)バス/デバイス/機能の値が変更されて起動する可能性があることも意味しますか?

つまり、最初のPCI列挙はBIOSによって行われ、ブートOS(私の場合はRHEL 6)がこの列挙リストを使用して識別されたハードウェアにサービスを提供することを理解しています。このリストには、見つかったデバイスが常に同じ順序で含まれていますか?

これは Red Hat Bugzilla のヒントであり、BIOSの順序が常に同じであることを意味します。

OSがデバイスを処理する順序については(まだ)話していません(たとえば、Linuxでは/ dev /の名前の順序を決定するため)。

ありがとう!

7
KevinM

BIOS(初期列挙を実行する)がPCI仕様に準拠している場合、簡単な答えは「はい」です。

によると:「PCIExpressシステムアーキテクチャ」R. Budruk、D。Anderson、T。Shanley、ADDISON-WESLEY DEVELOPER´S PRESS、2003年。ISBN:0-321-15630-7、743ページ:

仕様では、列挙ソフトウェアは深さ優先探索を実行する必要があるため、バス0で追加の機能/デバイスの検出に進む前に、バス1の検索に進む必要があります。

そして RHEL 6

9.デバイスとデバイスドライバー

PCIデバイスの注文

Red Hat Enterprise Linux 6では、PCIデバイスの順序はPCIデバイスの列挙に基づいています。 PCIデバイスの列挙は、PCI列挙アルゴリズム(最初に深さ、次に幅)に基づいており、システムタイプごとに一定です。さらに、デバイスが検出されると、モジュールのロードプロセスが順次実行され、インターフェイスに永続的な名前が付けられます。

ただし、(?の一部のバージョン)Linuxは、Linux列挙アルゴリズムを「幅優先」に変更するカーネルパラメーター「pci = bfsort」をサポートしています。これにより、LinuxカーネルがPCIデバイスをロードして初期化する順序がBIOSの方法で変更されます。

いずれの場合も、ブートからブートまで、列挙されたリストには、検出されたアイテムが同じ順序で含まれます。

5
KevinM