![Linux 内核可以枚举超出 bios 能力的 pcie 设备吗?](https://linux22.com/image/1408815/Linux%20%E5%86%85%E6%A0%B8%E5%8F%AF%E4%BB%A5%E6%9E%9A%E4%B8%BE%E8%B6%85%E5%87%BA%20bios%20%E8%83%BD%E5%8A%9B%E7%9A%84%20pcie%20%E8%AE%BE%E5%A4%87%E5%90%97%EF%BC%9F.png)
我正在尝试使用多个 pcie 背板构建一个大型系统。系统 bios 对可枚举的设备数量有限制。是否可以强制 linux 内核管理 pcie 设备并忽略 bios 为其提供的配置空间?
答案1
有点晚了,但也许对其他在这里遇到类似问题的人有用:
根据规范,PCI(e) 总线必须首先进行深度枚举。这意味着当找到交换机或透明桥时,必须对其进行配置,并且必须继续枚举此新发现的交换机/桥后面的设备。之后,它可以继续枚举在找到交换机/桥的同一级别的设备。为了降低复杂性和内存使用率,某些 BIOS 在其扫描的最大深度方面受到限制。由于您提到了多个背板,所以我假设情况确实如此。
Linux 内核没有这个限制。你可以在终端输入以下命令来刺激它重新扫描总线:
echo "1" > /sys/bus/pci/rescan
答案2
简单的答案:不会。真实的答案:有时。丑陋的答案:曾经是,但现在不是。令人悲伤的答案:英特尔和 AMD CPU/芯片组实现已经破坏了这一点,并使操作系统无法使用标准化 P2P 桥接位置调整 I/O 内存映射。BIOS 做得很差,在大多数情况下无法处理热插拔,即使可以,也做得很差,操作系统无法再按照规范的要求更改根端口分配。英特尔和 AMD 似乎并不关心。