匹配 PCI 和 Thunderbolt 设备

匹配 PCI 和 Thunderbolt 设备

有没有可靠的方法来查找 Linux 系统上通过特定 Thunderbolt 设备(例如 eGPU 外壳、Dock)连接的 PCI 设备(例如显卡)?

语境
在我的特定用例中,我最感兴趣的是检测和识别连接的 TB3 eGPU。我能够检测基于 PCI 的视频设备,但能够将它们与连接它们的 Thunderbolt 设备相匹配,将帮助我解决以下问题:

  1. 可靠地检测特定视频设备是否是 eGPU
  2. 通过识别 eGPU 外壳(通过 TB UUID)来区分多个 eGPU,即使它们是同一供应商/产品

我目前正在分别解析有关 PCI 和 Thunderbolt 设备的/sys/bus/pci/devices信息/sys/bus/thunderbolt/devices/


失败的尝试:使用 PCI 总线层次结构
不幸的是,PCI 总线层次结构在这方面似乎没有多大帮助。我可以将 Thunderbolt 设备映射到名为 的 PCI 设备Intel Corporation JHL7540 Thunderbolt 3 NHI,两个 Thunderbolt 设备(如果连接了两个)都指向同一设备。此外,视频卡 (eGPU) 的 PCI 设备是另一个 PCI 总线的子级,这使得看起来不可能将 PCI 视频设备 (eGPU) 直接映射到其相应的 Thunderbolt 设备(eGPU 外壳)。

虽然我还不太明白它的含义,但我在内核文档中找到的以下段落似乎在某种程度上证实了这一观察(?)。

Thunderbolt 主机控制器包含多个 PCIe 热插拔端口和一个 NHI 设备来管理 PCIe 交换机。从系统睡眠状态恢复时,NHI 设备需要重新建立到连接设备的 PCI 隧道,然后热插拔端口才能恢复。如果热插拔端口是 NHI 的子端口,则 PM 核心将自动执行此恢复命令,但不幸的是她们是阿姨

https://www.kernel.org/doc/html/v4.14/driver-api/device_link.html?highlight=thunderbolt#examples

资源
我对内核不熟悉,并且通过直接检查我的系统并从中得出结论来发现其中的大部分内容。如果有人可以向我提供有关 Linux/PCI/Thunderbolt 的有用资源的链接,这可能已经对我有很大帮助。为了完整起见,我在这里列出了一些链接,因为它们在我的学习过程中很有用。

相关内容