Use sysfs para reiniciar dispositivos PCI fallidos (tarjetas WiFi, tarjetas de sonido, etc.)

Este artículo describe un método para reiniciar dispositivos PCI. Demuestra cómo restablecer un dispositivo inalámbrico. Pero el concepto debería funcionar en cualquier dispositivo cuyo controlador de dispositivo tenga soporte de conexión en caliente adecuado.

Las computadoras generalmente consisten en varios dispositivos interconectados. Algunos dispositivos se pueden desconectar y volver a conectar físicamente con facilidad (por example, la mayoría de los dispositivos USB). Otros pueden requerir una interacción específica con el sistema operativo o software específico. Y otros requerirán un reinicio completo.

Las tarjetas inalámbricas para portátiles integradas son dispositivos PCI que pueden fallar durante el tiempo de ejecución, pero es posible que no sean fáciles de desconectar y volver a conectar físicamente sin un reinicio completo. En muchos casos, estos dispositivos se pueden reiniciar a través de la interfaz sysfs de Linux sin tener que reiniciar completamente la computadora.

Este artículo demostrará específicamente cómo reiniciar una tarjeta inalámbrica Atheros que se ha bloqueado.

Cómo reiniciar dispositivos PCI

Dependiendo de su entorno de escritorio y hardware en particular, es posible apagar y volver a encender la tarjeta PCI usando un interruptor o botón de GUI o de hardware. Pero si ninguna de esas opciones existe o funciona, el siguiente método CLI para reiniciar la tarjeta PCI podría resultar útil.

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

0000Para reiniciar una tarjeta inalámbrica, necesitará su dominio PCI, bus, dispositivo y dirección de función. Ejecute el comando lspci, como se muestra a continuación, y busque su salida para encontrar la dirección PCI de su tarjeta inalámbrica.en lo anterior examplela dirección PCI de la tarjeta Atheros es3d:00.0. Si la dirección que se muestra no incluye una parte de dominio (es decir, el número al comienzo de la línea contiene solo un carácter de dos puntos), entonces la computadora tiene solo un dominio PCI y es

.

# echo "1" > /sys/bus/pci/devices/DDDD:BB:DD.F/remove  
# sleep 1  
# echo "1" > /sys/bus/pci/rescan

Los siguientes comandos, con las letras mayúsculas sustituidas por la dirección PCI del dispositivo, se pueden usar para reiniciar un dispositivo PCI en un sistema en ejecución.

$ 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"

en lo anterior examplelos marcadores de posición DDDD, BB, DD y F son para el dominio, el bus, el dispositivo y la función del dispositivo PCI, respectivamente.

$ 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

Sustituyendo los valores de la example la salida del comando lspci que se muestra arriba da el comando que debería ejecutarse para reiniciar la tarjeta inalámbrica Atheros en este example sistema.

Si es necesario, los comandos anteriores se pueden automatizar colocándolos en un script.

Habilite los permisos ejecutables con, por examplechmod +x restart-wireless-card.sh y ejecute sudo ./restart-wireless-card.sh siempre que necesite reiniciar su dispositivo PCI.

notas finales

  1. No todos los dispositivos PCI se pueden reiniciar con este método. Pero la vida real example demostrado anteriormente funciona para que la tarjeta WiFi vuelva a funcionar sin necesidad de un reinicio completo de la PC.
  2. Referencias

stackexchange.com: ¿Funciona realmente la conexión en caliente de PCIe en la práctica?