Answers:
根据http://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pci,如果支持,您可以重置设备的各个功能:
What: /sys/bus/pci/devices/.../reset
Description:
Some devices allow an individual function to be reset
without affecting other functions in the same device.
For devices that have this support, a file named reset
will be present in sysfs. Writing 1 to this file
will perform reset.
由于通用PCI设备不可热插拔,因此无法重置它并让内核重新枚举它。
无论您要解决什么问题,肯定有比重设更好的方法。
上面的解决方案的问题在于它们需要设备的协作性。但是,在大多数情况下,重置它的原因恰恰是其不合作。
然而,因为它是描述在这里,还有另外一个“难”的方式将其复位的PCI水平:我们从PCI总线将其删除,然后重新插入它通过重新扫描。
步骤:
echo 1 >/sys/bus/pci/<pci-id-of-device>/remove
。我们可以使用lspci
命令找到其PCI ID 。echo 1 >/sys/bus/pci/rescan
我在这里遇到了一个有问题的pci设备,有时会进行PCI级别的重置,有时会通过读取删除的技巧对其进行修复。我将要编写一个脚本来自动完成该任务。:-)
00:14.0 USB controller: Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller
。我通过VFIO将其传递给VM,并且在VM重新引导后,我还必须重新引导主机以使其再次正常工作,否则会检测到任何插入的USB,但是通信失败。