- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 FPGA(就像大多数问这个问题的人一样),它在我的 Linux 内核进行初始 PCIe 总线扫描和枚举之后进行配置。您可以猜到,FPGA 实现了一个 PCIe 端点。
我想让 PCIe 内核重新枚举整个 PCIe 总线,这样我的 FPGA 就会显示出来,我可以加载我的驱动程序模块。我还希望能够为不同的配置交换 FPGA 负载。我的意思是我希望能够:
echo 1 > /sys/bus/pci/rescan
这似乎有效(仅有时),如果我想在首次枚举 FPGA 负载后对其进行热交换,则它不起作用。
最佳答案
这实际上取决于 FPGA 上发生的变化。问题在于如何完成 PCIe 枚举和地址分配,尤其是如何配置 PCIe 开关。分配必须作为深度优先搜索一次完成。完成后,如果不更改所有后续分配,就无法插入额外的总线编号或地址空间,这将需要重新加载所有相应的设备驱动程序。基本上,一旦枚举了总线并分配了地址,您就无法在不重新枚举整个总线的情况下更改整体分配,这需要重新启动。在特定 PCIe 端口上预分配资源可以缓解此问题,并且是 PCIe 热插拔所必需的。
如果 PCIe BAR 配置未更改,则通常执行删除/hot reset/rescan 就足够了,不需要重新启动。
如果 BAR 配置发生了变化,那就另当别论了。如果新的 BAR 更小,那么应该没有问题。但是如果新的 BAR 更大或者有更多的 BAR,如果没有足够的地址空间分配给设备所连接的交换机端口,那么这些 BAR 将无法分配地址空间,设备将无法枚举。在这种情况下,需要重新启动才能重新分配资源。不要忘记还有 32 位 BAR 和 64 位 BAR,这些 BAR 是从两个不同的地址空间池中分配的,因此更改 BAR 类型也可能需要重新启动才能重新枚举。
如果您要从无设备到设备(即空白 FPGA 到已配置的 FPGA),则可能需要重新分配总线编号,这需要重新启动。
关于linux-kernel - 如何对 PCIe 总线进行 TRUE 重新扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32334870/
我是一名优秀的程序员,十分优秀!