根据 PCI 标准,设备是根据供应商 ID、设备 ID 和总线编号来识别的。相同类型的所有设备都具有相同的供应商 ID 和设备 ID。如果我将两个这样的设备放在同一总线上,比如总线 0。PCI 软件子系统将如何区分这两者?
如果这种情况在 PCI 中是不可能的,那么通过 PCI Express Switch 可以做到吗?
根据 PCI 标准,设备是根据供应商 ID、设备 ID 和总线编号来识别的。相同类型的所有设备都具有相同的供应商 ID 和设备 ID。如果我将两个这样的设备放在同一总线上,比如总线 0。PCI 软件子系统将如何区分这两者?
如果这种情况在 PCI 中是不可能的,那么通过 PCI Express Switch 可以做到吗?
是的,完全没问题。主机通过插槽区分相同的设备。
PCI 和 PCI Express 设备由 Bus/Device/Function 标识,这对于系统中的每个设备来说都是唯一的。供应商和设备 ID 只是在某个总线/设备/功能上找到的设备的属性。
枚举板卡时,驱动程序通常会扫描 PCI 配置空间(遍历所有已安装的 PCI 设备),直到找到一个或多个与预期的供应商和设备 ID 匹配的设备,可能还有子系统 ID。一旦找到匹配项,它应该将总线/设备/功能记录为打开设备的“句柄”。
正确编写的软件应该找到所有匹配的供应商/设备,将它们放在一个表中,然后让您选择要使用的那个(例如 /dev/mydevice0、/dev/mydevice1 等)。但是,我看到过在第一场比赛中停止的懒惰软件。
据我所知,每个 PCI 设备都可以由 (Bus,Device,Function) 唯一地描述。考虑您的情况(2 个设备安装了相同的 VID 和 DID),我认为它们必须位于不同的 PCI 总线上!如果它们必须在同一总线中,请使它们的设备或功能编号不同