PCI 規格に従って、デバイスはベンダー ID、デバイス ID、およびバス番号に基づいて識別されます。同じタイプのデバイスはすべて、同一のベンダー ID とデバイス ID を持っています。このようなデバイスを 2 つ同じバス (バス 0 など) に配置した場合、PCI ソフトウェア サブシステムは 2 つをどのように区別しますか?
PCI ではそのようなケースが不可能である場合、PCI Express Switch を介してそのようなことが可能になるのでしょうか?
PCI 規格に従って、デバイスはベンダー ID、デバイス ID、およびバス番号に基づいて識別されます。同じタイプのデバイスはすべて、同一のベンダー ID とデバイス ID を持っています。このようなデバイスを 2 つ同じバス (バス 0 など) に配置した場合、PCI ソフトウェア サブシステムは 2 つをどのように区別しますか?
PCI ではそのようなケースが不可能である場合、PCI Express Switch を介してそのようなことが可能になるのでしょうか?
はい、全然大丈夫です。ホストは、スロットごとに同一のデバイスを識別します。
PCI および PCI Express デバイスは、バス/デバイス/機能によって識別されます。これは、システム内のデバイスごとに一意である必要があります。ベンダーとデバイス ID は、特定のバス/デバイス/機能で見つかったデバイスの単なるプロパティです。
ボードを列挙するとき、ドライバーは通常、予想されるベンダーとデバイス ID、および場合によってはサブシステム ID に一致する 1 つ以上のデバイスが見つかるまで、PCI 構成スペースをスキャンします (インストールされているすべての PCI デバイスを反復処理します)。一致が見つかったら、バス/デバイス/機能をオープン デバイスへの「ハンドル」として記録する必要があります。
適切に作成されたソフトウェアは、すべてのベンダー/デバイスの一致を見つけてテーブルに配置し、使用するものを選択できるようにする必要があります (例: /dev/mydevice0、/dev/mydevice1 など)。ただし、最初の一致で停止するだけの遅延ソフトウェアを見たことがあります。
私が知っているように、各 PCI デバイスは (バス、デバイス、機能) によって一意に記述できます。あなたのケースを考えてみてください(2つのデバイスには同じVIDとDIDがインストールされています)、それらは異なるPCIバスに配置されている必要があると思います! それらが同じバスにある必要がある場合は、それらのデバイスまたは機能番号を異なるものにしてください