我有一个FPGA(就像大多数人问这个问题一样),在我的Linux内核执行了初始PCIe总线扫描和枚举之后就对其进行了配置。如您所料,FPGA实现了PCIe端点。
我想让PCIe核心重新枚举整个PCIe总线,这样我的FPGA就会显示出来,并且可以加载我的驱动程序模块。我还希望能够交换FPGA来加载不同的配置。我的意思是,我希望能够:
全部无需重启Linux
这里是在其他地方提出但不能解决问题的解决方案。
echo 1 > /sys/bus/pci/rescan
这似乎可行(仅在某些情况下可行),并且如果我想在首次枚举FPGA负载后热交换它,则无法正常工作。可以使用PCIe的热插拔/电源管理工具来完成这项工作吗?如果是这样,那么有什么好的资源可以将Hotplug系统与PCIe一起使用? (LDD并未完全涵盖它)
最佳答案
通过echo 1 > /sys/bus/pci/rescan
重新枚举PCIe总线/树是正确的解决方案。我们使用的方式与您描述的相同。
我们正在使用echo 1 > $pcidevice/remove
断开驱动程序与设备的连接,并将设备与树分离。驱动程序(xillybus)不会卸载,只是断开连接。
更好的解决方案是仅重新扫描与FPGA相连的节点。这减少了对系统的总体影响。
该技术用于RC3E FPGA云系统。
关于linux-kernel - 如何对PCIe总线进行真实的重新扫描,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32334870/