Wie man einen TRUE Rescan des PCIe-Busses durchführt

9

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:

  1. Booten Sie Linux
  2. Konfigurieren Sie FPGA
  3. Listen Sie das PCIe-Endpunkt- und Lademodul auf
  4. Entfernen Sie den PCIe-Endpunkt
  5. FPGA neu konfigurieren
  6. Geben Sie den PCIe-Endpunkt
  7. 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)

    
whh4000 01.09.2015, 14:57
quelle

1 Antwort

9
___ tag123linuxdevicedriver ___ Gerätetreiber übernehmen im Linux-Kernel eine besondere Rolle. Es sind programmatisch abstrahierte "Black Boxes", die ein bestimmtes Hardware-Teil auf eine wohldefinierte interne Programmierschnittstelle reagieren lassen. Sie verbergen vollständig die Details, wie das Gerät funktioniert. ___ qstnhdr ___ Wie man einen TRUE Rescan des PCIe-Busses durchführt ___ antwort32340573 ___

Die Aufzählung des PCIe-Busses / Baumes über echo 1 > /sys/bus/pci/rescan ist die richtige Lösung. Wir verwenden es auf die gleiche Weise, wie Sie es beschrieben haben.

Wir verwenden echo 1 > $pcidevice/remove , um den Treiber vom Gerät zu trennen und das Gerät vom Baum zu trennen. Der Treiber (xillybus) wird nicht entladen, sondern nur getrennt.

Eine bessere Lösung besteht darin, nur den Knoten neu zu scannen, an den Ihr FPGA angeschlossen ist. Dies reduziert den Gesamteinfluss für das System.

Diese Technik wird im RC3E FPGA-Cloud-System verwendet.

    
___ tag123linuxkernel ___ Dieses Tag ist für Fragen zu den Interna des Linux-Kernels selbst gedacht - insbesondere zum Schreiben von Code, der im Kontext des Kernels läuft (wie Kernel-Module oder Treiber). Fragen zum Schreiben von Userspace-Code in Linux sollten stattdessen mit [linux] getaggt werden. Da sich die Interna des Linux-Kernels ständig ändern, ist es hilfreich, die genaue (n) Kernel-Version (en) anzugeben, an denen Sie interessiert sind. ___ qstntxt ___

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:

  1. Booten Sie Linux
  2. Konfigurieren Sie FPGA
  3. Listen Sie das PCIe-Endpunkt- und Lademodul auf
  4. Entfernen Sie den PCIe-Endpunkt
  5. FPGA neu konfigurieren
  6. Geben Sie den PCIe-Endpunkt
  7. erneut auf

Alles ohne Neustart von Linux

Hier sind Lösungen, die anderswo vorgeschlagen wurden, aber das Problem nicht lösen.

%code% 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)

    
___ tag123pcie ___ PCI-Express (PCIe) ist eine Peer-2-Peer-Verbindung, die auf PCI und PCI-X basiert. Neueste Generation ist Gen 5.0. PCIe wird von PCI-SIG gepflegt und entwickelt. ___ tag123hotplugging ___ hilf uns dieses Wiki zu bearbeiten ___
Paebbels 01.09.2015 20:44
quelle