Tengo un dispositivo PCIe que solo funciona correctamente cuando la computadora está completamente apagada y luego se vuelve a encender. Emitir un comando reboot
o reboot -p
comando simple no parece apagar y encender la tarjeta PCIe, lo que hace que no funcione después del reinicio.
¿Hay alguna forma de, desde el sistema operativo, apagar y encender un dispositivo en una ranura PCIe? Puedo encontrarlo /sys/bus/pci/devices/0000*/
, pero no puedo encontrar la manera de restablecer correctamente la placa. El poder de alternancia parece ser la única forma.
Salvo eso, ¿puedo cambiar una configuración en algún lugar que causará un ciclo de energía completo en un reboot
comando?
Estoy ejecutando Ubuntu 12.10 por cierto.
devices
power-management
pci
zachd1_618
fuente
fuente
reboot -f
? Esto es similar a presionar el botón de encendido de la CPU.reboot
no funcionaba. Tureboot -f
todavía es un reinicio suave.Respuestas:
Método potencial # 1
Creo que puedes hacerlo con estos comandos:
inhabilitar
habilitar
¿Dónde
$NUMBER
está el número de la ranura PCI?lspci -vv
puede ayudar a identificar el dispositivo. Esto no está muy bien documentado ...Método potencial # 2
Encontré este hilo en U&L , problema similar: hay algunas respuestas a esa pregunta que dicen que puede restablecer con este comando:
Sin embargo, ¡leería las respuestas allí! ¡Hay condiciones para hacerlo de esta manera! ¡Específicamente leería esta respuesta !
Método potencial # 3
Hay un comando Unix
setpci
que puede proporcionarle un método para restablecer un dispositivo en el bus PCI.No vi ningún ejemplo específico con este comando, por lo que tendrá que buscar ejemplos en Google y consultar la página de manual . Seguiría este comando ligeramente hasta que esté seguro de su uso. Por lo que he leído al respecto, está manipulando el hardware directamente, por lo que siempre hay riesgos al hacerlo usted mismo en lugar de usar una herramienta que expone este tipo de funcionalidad.
fuente
/sys/bus/pci/devices/$NUMBER/
. Pero nada parece justificar la configuración 0 o 1echo "1" > ...
.power
realmente lo coloca en D3.remove
yrescan
permitirá que el kernel alimente por ciclos el dispositivo PCI sinreboot
:donde DDDD.BB.DD.F = Dominio: Bus: Device.Function
fuente
Los reinicios en PCI express son un poco complejos. Hay dos tipos principales de restablecimientos: restablecimiento convencional y restablecimiento a nivel de función. También hay dos tipos de restablecimientos convencionales, restablecimientos fundamentales y restablecimientos no fundamentales. Consulte la especificación PCI express para todos los detalles.
Un 'restablecimiento en frío' es un restablecimiento fundamental que se realiza después de que se aplica alimentación a un dispositivo PCIe. Parece que no hay una forma estándar de activar un reinicio en frío, salvo para apagar y volver a encender el sistema. En mis máquinas, el
/sys/bus/pci/slots
directorio está vacío.Un 'reinicio en caliente' es un reinicio fundamental que se activa sin desconectar la alimentación del dispositivo. Parece que no hay una forma estándar de activar un reinicio en caliente.
Un 'restablecimiento en caliente' es un restablecimiento convencional que se activa a través de un enlace PCI express. Se activa un restablecimiento en caliente cuando un enlace se fuerza a inactividad eléctrica o al enviar conjuntos ordenados TS1 y TS2 con el conjunto de bits de restablecimiento en caliente. El software puede iniciar un restablecimiento en caliente configurando y luego borrando el bit de restablecimiento del bus secundario en el registro de control del puente en el espacio de configuración PCI del puerto del puente aguas arriba del dispositivo.
Un 'restablecimiento de nivel de función' (FLR) es un restablecimiento que afecta solo una función de un dispositivo PCI express. No debe restablecer todo el dispositivo PCIe. La implementación de restablecimientos a nivel de función no es requerida por la especificación PCIe. Un restablecimiento de nivel de función se inicia configurando el bit de restablecimiento de nivel de función de inicio en el registro de control de dispositivo de la función en la estructura de capacidad PCI express en el espacio de configuración de PCI.
Linux expone la funcionalidad de restablecimiento a nivel de función en forma de
/sys/bus/pci/devices/$dev/reset
. Escribir un 1 en este archivo iniciará un restablecimiento de nivel de función en la función correspondiente. Tenga en cuenta que esto solo afecta esa función específica del dispositivo, no todo el dispositivo, y no se requiere que los dispositivos implementen restablecimientos de nivel de función según la especificación PCIe.No conozco ningún método 'agradable' para activar un reinicio en caliente (no hay entrada de sysfs para eso). Sin embargo, es posible usar setpci para hacerlo:
Asegúrese de que todos los controladores conectados estén descargados antes de ejecutar este script. Este script intentará eliminar el dispositivo PCIe, luego ordenará al puerto del interruptor ascendente que emita un restablecimiento en caliente, luego intentará volver a escanear el bus PCIe. Este script también se ha probado solo en dispositivos con una sola función, por lo que puede necesitar un poco de reelaboración para dispositivos con múltiples funciones.
fuente