Setzen Sie ein PCI-Gerät unter Linux zurück


12

Gibt es eine allgemeine Möglichkeit, ein PCI-Gerät in Linux über die Befehlszeile zurückzusetzen? Das heißt, der PCI-Bus gibt einen Rücksetzbefehl aus.

Antworten:



5

Das, was der PCI-Bus einem Zurücksetzen auf Geräteebene am nächsten kommt, ist, den Energiezustand auf D3 und zurück auf D0 zu ändern. Nach dem Entladen des Treibers (es wäre schlecht, die Hardware unter dem Treiber zurückzusetzen) können Sie setpciin die Steuerregister schreiben, um den Energiezustand zu ändern, aber ich glaube, dies geschieht automatisch, wenn Sie den Treiber entladen.


1

Da ein generisches PCI-Gerät nicht Hot-Plug-fähig ist, kann es nicht zurückgesetzt und vom Kernel erneut aufgelistet werden.

Welche Art von Problemen Sie auch lösen möchten, es gibt sicherlich einen besseren Weg, als sie einfach zurückzusetzen.


3
Ich simuliere ein PCI-Gerät in QEMU und muss seinen Status während der Entwicklung zurücksetzen. Ich wollte es aus dem Gast heraus tun.
Jonathan

Ich habe eine fehlerhafte PCI-CCTV-Karte, sie funktioniert, stirbt aber manchmal mit einem Segfault. Danach muss das gesamte System neu gestartet werden, was durch einen PCI-Reset vermieden werden kann. Das System ist stabil, kein Schaden, nur der Videoeingang wird leer. Manchmal ist es daher besser, das PCI zurückzusetzen, als einen Neustart durchzuführen die ganze maschine jeden tag. (vor allem, wenn Sie 6 Monate lang
8000

1

Das Problem bei den obigen Lösungen besteht darin, dass sie die Zusammenarbeit des Geräts erfordern; In den meisten Szenarien liegt der Grund für das Zurücksetzen jedoch genau in der mangelnden Kooperativität.

Wie hier beschrieben , gibt es jedoch eine andere, "schwierigere" Möglichkeit, es auf der PCI-Ebene zurückzusetzen: Wir entfernen es aus dem PCI-Bus und fügen es dann durch einen erneuten Scan wieder ein.

Die Schritte:

  1. echo 1 >/sys/bus/pci/<pci-id-of-device>/remove. Wir können seine PCI-ID mit einem lspciBefehl finden.
  2. echo 1 >/sys/bus/pci/rescan

Ich habe hier ein fehlerhaftes PCI-Gerät, manchmal einen PCI-Level-Reset, manchmal behebt dieser Trick das Problem. Ich bin dabei, ein Skript zu schreiben, um es automatisch zu machen. :-)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.