Существует ли общий способ сброса устройства PCI в Linux из командной строки? То есть заставить шину PCI выдавать команду сброса.
в соответствии с 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 к сбросу уровня устройства, - это изменение состояния питания на D3 и обратно на D0. После выгрузки драйвера (было бы плохо сбросить аппаратное обеспечение из-под драйвера), вы можете использовать его setpci
для записи в управляющие регистры для изменения состояния питания, но я считаю, что это происходит автоматически при выгрузке драйвера.
Поскольку универсальное устройство PCI не поддерживает горячее подключение, не будет способа сбросить его и заставить ядро пересчитать его.
Какие бы проблемы вы не пытались решить, несомненно, есть лучший способ, чем просто сбросить его.
Проблема с вышеупомянутыми решениями состоит в том, что они требуют совместимости устройства; однако в большинстве сценариев причиной сброса является именно его неработоспособность.
Однако, как описано здесь , есть еще один, более сложный способ сброса его на уровне PCI: мы удаляем его с шины PCI и затем повторно вставляем его путем повторного сканирования.
Шаги:
echo 1 >/sys/bus/pci/<pci-id-of-device>/remove
, Мы можем найти его PCI ID с помощьюlspci
команды.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, и после перезагрузки виртуальной машины мне также приходится перезагружать хост, чтобы он снова работал, в противном случае обнаруживается любой подключенный USB, но не удается установить связь.