У меня есть устройство PCIe, которое работает правильно только тогда, когда компьютер полностью выключен, а затем снова включен. Появление простой команды reboot
или reboot -p
команды не приводит к отключению питания карты PCIe, что приводит к тому, что она не работает после перезагрузки.
Есть ли способ из операционной системы отключить питание устройства в слоте PCIe? Я могу найти это в /sys/bus/pci/devices/0000*/
, но я не могу понять, как правильно сбросить плату. Похоже, что переключающая сила - единственный путь.
За исключением этого, могу ли я изменить настройку где-нибудь, что вызовет полный цикл питания для reboot
команды?
Кстати, я использую Ubuntu 12.10.
devices
power-management
pci
zachd1_618
источник
источник
reboot -f
? Это похоже на нажатие кнопки питания процессора.reboot
не работает. Вашаreboot -f
все еще мягкая перезагрузка.Ответы:
Потенциальный метод № 1
Я думаю, что вы можете сделать это с помощью этих команд:
отключить
включить
Где
$NUMBER
номер слота PCI.lspci -vv
может помочь идентифицировать устройство. Это не очень хорошо задокументировано ...Потенциальный метод № 2
Я сталкивался с этой веткой на U & L , похожая проблема: есть некоторые ответы на этот вопрос, которые говорят, что вы можете сбросить с помощью этой команды:
Однако я бы прочитал ответы там! Есть условия, чтобы делать это таким образом! Конкретно я бы прочитал этот ответ !
Потенциальный метод № 3
Существует команда Unix
setpci
, которая может дать вам способ сброса устройства на шине PCI.Я не видел никаких конкретных примеров с этой командой, поэтому вам придется поискать примеры в Google и просмотреть страницу руководства . Я бы слегка пошагнул с этой командой, пока вы не будете уверены в ее использовании. Из того, что я читал об этом, он напрямую манипулирует оборудованием, поэтому всегда есть риск сделать это самостоятельно, а не использовать инструмент, который демонстрирует этот тип функциональности!
источник
/sys/bus/pci/devices/$NUMBER/
. Но, кажется, ничто не гарантирует установки 0 или 1echo "1" > ...
.power
действительно ли переключение помещает его в D3.remove
иrescan
позволит ядру циклически запитывать устройство PCI безreboot
:где DDDD.BB.DD.F = Домен: Шина: Device.Function
источник
Сброс в PCI Express немного сложен. Существует два основных типа сброса: обычный сброс и сброс на уровне функций. Есть также два типа обычных сбросов: фундаментальные и неосновные. См. Спецификацию PCI Express для всех деталей.
«Холодный сброс» - это фундаментальный сброс, который происходит после подачи питания на устройство PCIe. Похоже, не существует стандартного способа холодного сброса, за исключением выключения и повторного включения системы. На моих машинах
/sys/bus/pci/slots
каталог пуст.«Теплый сброс» - это основной сброс, который запускается без отключения питания устройства. Похоже, не существует стандартного способа запуска «горячего» сброса.
«Горячий сброс» - это обычный сброс, который запускается по каналу PCI Express. Горячий сброс запускается, когда канал принудительно переключается в электрический режим, или путем отправки упорядоченных наборов TS1 и TS2 с установленным битом горячего сброса. Программное обеспечение может инициировать «горячий» сброс, установив, а затем сбросив бит сброса вторичной шины в регистре управления мостом в пространстве конфигурации PCI порта моста перед устройством.
«Сброс на уровне функций» (FLR) - это сброс, который влияет только на одну функцию устройства PCI Express. Он не должен сбрасывать все устройство PCIe. Реализация сброса на уровне функций не требуется в спецификации PCIe. Сброс на уровне функций инициируется установкой бита инициализации сброса на уровне функций в регистре управления устройством функции в структуре возможностей PCI Express в пространстве конфигурации PCI.
Linux предоставляет функциональность сброса на уровне функций в форме
/sys/bus/pci/devices/$dev/reset
. Запись 1 в этот файл инициирует сброс уровня функции для соответствующей функции. Обратите внимание, что это влияет только на эту конкретную функцию устройства, а не на все устройство, и устройства не обязаны выполнять сброс на уровне функций согласно спецификации PCIe.Я не знаю ни одного «хорошего» метода для запуска «горячего» сброса (для этого нет записи sysfs). Однако для этого можно использовать setpci:
Убедитесь, что все подключенные драйверы выгружены перед запуском этого скрипта. Этот сценарий попытается удалить устройство PCIe, затем подать команду на порт вышестоящего коммутатора для выполнения горячего сброса, а затем попытаться выполнить повторное сканирование шины PCIe. Этот сценарий также был протестирован только на устройствах с одной функцией, поэтому может потребоваться доработка для устройств с несколькими функциями.
источник