在Linux中重置PCI设备


12

有没有一种通用的方法可以从命令行在Linux中重置PCI设备?即,使PCI总线发出复位命令。

Answers:



5

PCI总线与设备级别重置最接近的事情是将电源状态更改为D3,然后再更改为D0。卸载驱动程序后(将硬件从驱动程序下重置会很糟糕),您可以setpci用来写入控制寄存器以更改电源状态,但是我相信这在您卸载驱动程序时会自动发生。


1

由于通用PCI设备不可热插拔,因此无法重置它并让内核重新枚举它。

无论您要解决什么问题,肯定有比重设更好的方法。


4
我正在QEMU中模拟PCI设备,并且在开发时需要重置其状态。我想在客人内部做。
乔纳森(Jonathan)2012年

1
我有一个越野车pci cctv卡,它可以工作,但有时会死于段错误。之后,需要重启整个系统,通过PCI重置可以避免这种情况...系统稳定,无害,只有视频输入为空白,因此有时候重置PCI比重启是更好的解决方案每天整台机器。(特别是如果您距离该机器
8000

1

上面的解决方案的问题在于它们需要设备的协作性。但是,在大多数情况下,重置它的原因恰恰是其不合作。

然而,因为它是描述在这里,还有另外一个“难”的方式将其复位的PCI水平:我们从PCI总线将其删除,然后重新插入它通过重新扫描。

步骤:

  1. echo 1 >/sys/bus/pci/<pci-id-of-device>/remove。我们可以使用lspci命令找到其PCI ID 。
  2. echo 1 >/sys/bus/pci/rescan

我在这里遇到了一个有问题的pci设备,有时会进行PCI级别的重置,有时会通过读取删除的技巧对其进行修复。我将要编写一个脚本来自动完成该任务。:-)


啊。即使重设后,我的USB控制器仍然有问题。
克里斯

@Chris您确定它是控制器,而不是设备吗?
彼得-恢复莫妮卡

是的,我确定是控制器00:14.0 USB controller: Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller。我通过VFIO将其传递给VM,并且在VM重新引导后,我还必须重新引导主机以使其再次正常工作,否则会检测到任何插入的USB,但是通信失败。
克里斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.