Используйте sysfs для перезапуска любого PCI-устройства в Linux

В этой статье описан один из методов перезапуска устройств PCI. В ней демонстрируется перезапуск беспроводного устройства. Но концепция должна работать на любом устройстве, драйвер которого имеет адекватную поддержку горячего подключения.

Компьютеры обычно состоят из нескольких взаимосвязанных устройств. Некоторые устройства можно легко физически отключить и снова подключить (например, большинство USB-устройств). Другие могут потребовать особого взаимодействия с операционной системой или специальным программным обеспечением. А для других потребуется полная перезагрузка.

Встроенные беспроводные карты ноутбуков – это PCI-устройства, которые могут выйти из строя во время работы, но их нелегко физически отключить и снова подключить без полной перезагрузки. Во многих случаях эти устройства можно перезапустить через интерфейс sysfs в Linux без полной перезагрузки компьютера.

В этой статье будет показано, как перезапустить беспроводную карту Atheros, которая заблокировалась.

Как перезапустить устройства PCI в Linux?

В зависимости от конкретной среды рабочего стола и аппаратного обеспечения, может быть возможно выключить и снова включить PCI-карту с помощью графического интерфейса или аппаратного переключателя или кнопки. Но если ни один из этих вариантов не существует или не работает, может оказаться полезным следующий метод перезапуска PCI-карты с помощью командной строки.

Чтобы перезапустить беспроводную карту, вам понадобится ее PCI-адрес домена, шины, устройства и функции. Запустите команду lspci, как показано ниже, и найдите в ее выводе PCI-адрес вашей беспроводной карты.

lspci
3d:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 32)

В приведенном выше примере PCI-адрес карты Atheros – 3d:00.0. Если указанный адрес не содержит доменной части (то есть число в начале строки содержит только один символ двоеточия), значит, компьютер имеет только один PCI-домен, и он равен 0000.

Следующие команды, в которых заглавные буквы заменены PCI-адресом устройства, могут быть использованы для перезапуска PCI-устройства в работающей системе.

sudo /bin/sh -c "echo '1' > /sys/bus/pci/devices/0000:3d:00.0/remove"
sleep 1
sudo /bin/sh -c "echo '1' > /sys/bus/pci/rescan"

Подстановка значений из примера вывода команды lspci, показанного выше, дает команду, которую нужно выполнить для перезапуска беспроводной карты Atheros в этой системе.

При необходимости вышеуказанные команды можно автоматизировать, поместив их в сценарий.

nano restart-wireless-card.sh
#!/bin/bash
echo "1" > /sys/bus/pci/devices/0000:3d:00.0/remove  
sleep 1  
echo "1" > /sys/bus/pci/rescan

Добавьте права на запуск этого скрипта и запустите его:

chmod x restart-wireless-card.sh
sudo ./restart-wireless-card.sh

Последние замечания

Не все PCI-устройства могут быть перезапущены этим методом. Но реальный пример, продемонстрированный выше, действительно работает, чтобы снова запустить карту WiFi, не требуя полной перезагрузки ПК.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен fedoramagazine.org

Похожие статьи

Комментарии (0)