Ich habe ein FPGA (wie die meisten Leute, die diese Frage stellen), die konfiguriert werden, nachdem mein Linux-Kernel den ersten PCIe-Bus-Scan und die Enumeration durchgeführt hat. Wie Sie sich vorstellen können, implementiert der FPGA einen PCIe-Endpunkt.
Ich möchte, dass der PCIe-Core den gesamten PCIe-Bus aufzählt, so dass mein FPGA dann angezeigt wird und ich mein Treibermodul laden kann. Ich würde auch gerne die Möglichkeit haben den FPGA für eine andere Konfiguration zu laden. Damit meine ich, ich würde gerne in der Lage sein:
- Booten Sie Linux
- Konfigurieren Sie FPGA
- Listen Sie das PCIe-Endpunkt- und Lademodul auf
- Entfernen Sie den PCIe-Endpunkt
- FPGA neu konfigurieren
- Geben Sie den PCIe-Endpunkt
erneut auf
Alles ohne Neustart von Linux
Hier sind Lösungen, die anderswo vorgeschlagen wurden, aber das Problem nicht lösen.
echo 1 > /sys/bus/pci/rescan
Dies scheint zu funktionieren (nur manchmal) und es funktioniert nicht, wenn ich die FPGA-Last nach der ersten Aufzählung hotswapieren möchte.
Hier ist eine ziemlich invasive Methode (die ich nicht getestet habe), die jemand anderswo auch vorgeschlagen hat. Ссылка
Können die Hotplug / Power-Management-Funktionen von PCIe dazu verwendet werden? Wenn ja, gibt es gute Ressourcen für die Verwendung des Hotplug-Systems mit PCIe? (LDD deckt es nicht gründlich genug)