Hacer trampa en BIOS POST falsificando un dispositivo PCIe

Hacer trampa en BIOS POST falsificando un dispositivo PCIe

Quiero dejar que el proceso POST de Bios crea que hay una tarjeta gráfica instalada. La necesidad surge porque alguien no tan inteligente ha decidido que las placas sin una tarjeta de video activa no deben arrancar. Esto se ha abordado anteriormente en otras preguntas, más en profundidad:¿Una PC moderna requiere una tarjeta gráfica para funcionar?

Mi comprensión de la interacción BIOS/Hardware es tal que Bios identifica la especie de hardware en un nivel de comunicación muy rudimentario; además, no hay muchos canales donde dicha comunicación pueda tener lugar (sospecho que el lado A del pin 7 contra tierra). Mientras que para los dispositivos USB los códigos que identifican la naturaleza del dispositivo son fáciles de encontrar en la web, para los dispositivos PCIe esto parece ser un secreto bien guardado o más bien confuso por trivialidades. Sin embargo, esto debe ser un conocimiento de libro de texto, por lo que me alegraría que alguien supiera dónde se especifica o, mejor aún, cómo funciona en la práctica.

Lo que sí sé es que puedo arrancar la placa a través de la BIOS, sacar la tarjeta gráfica y conectar un adaptador SATA. Después de todo, PCIe tiene capacidad de conexión en caliente, así es como se supone que funciona. Pero hacer esto hace que reiniciar sea una tarea ardua, lo que a veces me hace retrasar las actualizaciones hasta el punto en que necesito reiniciar de todos modos por alguna otra razón.

Respuesta1

La identificación de dispositivos USB y PCI es en realidad muy similar. En el caso de PCI (PCIe es lo mismo), la información está en el encabezado de configuración de PCI. Estos aparecen en el espacio físico de direcciones en ubicaciones predecibles y, por tanto, innumerables.

El formato del encabezado de configuración es muy público. Hay un código de proveedor, una identificación de producto, una identificación de subsistema y un número de revisión. También hay un código de "clase". Las tarjetas gráficas son de clase 030000. USB y PCI incluso utilizan el mismo conjunto de códigos de proveedor; por ejemplo, el proveedor 0x8086 es Intel.

Esto es lo que busca el firmware. No podrás engañarlo conectando un par de pines. Necesitará el esqueleto de un dispositivo de destino PCIe estándar que responda a las consultas con un encabezado de configuración completo.

Peor aún: no creo que sea suficiente fabricar un dispositivo PCIe "simple" que mienta sobre su ID de dispositivo y código de clase. Su firmware va a quererhablar conesa tarjeta gráfica con la interfaz de registro VGA estándar, y eso no va a funcionar.

información relacionada