Una ROM de opción para la plataforma PC (es decir, el IBM PC y sus sucesores) es un firmware que reside en la ROM de una tarjeta de expansión (o almacenado junto con la BIOS principal del sistema ), que se ejecuta para inicializar el dispositivo y (opcionalmente) agregar soporte para el dispositivo a la BIOS. En su uso habitual, es esencialmente un controlador que actúa como interfaz entre la API de la BIOS y el hardware. Técnicamente, una ROM de opción es un firmware que la BIOS ejecuta después del POST (la prueba e inicialización del hardware básico del sistema) y antes del proceso de arranque de la BIOS, obteniendo el control total del sistema y, en general, sin restricciones en sus acciones. La BIOS depende de cada ROM de opción para devolver el control y poder llamar a la siguiente ROM de opción o iniciar el proceso de arranque. Por esta razón, es posible (aunque no habitual) que una ROM de opción mantenga el control e interrumpa el proceso de arranque de la BIOS. La BIOS (al menos en su diseño original por IBM) generalmente busca e inicializa (mediante la ejecución) las ROM de opciones en orden ascendente de direcciones a intervalos de direcciones de 2 KB dentro de dos rangos de direcciones diferentes por encima de la dirección C0000h en el espacio de direcciones de memoria convencional (de 20 bits) ; los sistemas posteriores también pueden buscar rangos de direcciones adicionales en el espacio de direcciones extendido de 24 o 32 bits.
En la era ISA , las ROM de opción eran necesarias para permitir el arranque de dispositivos periféricos que no eran Plug and Play y para extender la BIOS, brindando soporte para cualquier dispositivo periférico que no fuera Plug and Play, de la misma manera que se admite para los periféricos estándar e integrados en la placa base. Las ROM de opción también se utilizan para extender la BIOS o para agregar otros servicios de firmware a la misma. En principio, una ROM de opción podría proporcionar cualquier tipo de extensión de firmware, como una biblioteca de subrutinas de gráficos de video o un conjunto de servicios de procesamiento de audio PCM , y hacer que se instale en la RAM del sistema y, opcionalmente, en el sistema de interrupciones de la CPU antes del arranque.
Una ROM de opción común es la BIOS de vídeo que se carga muy pronto en el proceso de arranque y engancha INT 10h para que se pueda mostrar la salida de la autoprueba de encendido (POST). La BIOS de vídeo casi siempre se encuentra en el segmento de memoria que comienza en , el inicio del área de memoria reservada para las ROM de opción; esto se debe a que cuando la placa base tiene un controlador VGAC0000h integrado , la ROM de opción residirá en la BIOS: la BIOS sabe dónde está y la copia en la RAM en un momento fijo. Otras ROM pueden ubicarse desde segmentos hasta en PC antiguas. [ 1 ] La dirección de búsqueda final se limitó al segmento [ 2 ] o [ 3 ] en productos modernos. La especificación de arranque de la BIOS requiere que las ROM de opción estén alineadas a límites de 2 kB (por ejemplo, segmentos , etc.). Los dos primeros bytes de la ROM deben ser . [ 4 ] El tercer byte indica el tamaño de la ROM en bloques de 512 bytes (por ejemplo, para una ROM de 16 kB). Y el cuarto byte es donde la BIOS comienza la ejecución de la ROM de opciones para inicializarla antes de que el sistema arranque. A menudo, esta inicialización se realiza mediante una instrucción de salto de 3 bytes que comienza con un valor hexadecimal . [ 5 ]C8000hF4000hDFFFFhEFFFFhC8000h, C8800h, C9000h, C9800h55 AA20hE9
Uso original de las ROM de opciones para arrancar a través de tarjetas de expansión.
Antes del desarrollo y la adopción generalizada del estándar Plug and Play BIOS, un dispositivo adicional, como un controlador de disco duro o una tarjeta adaptadora de red (NIC), generalmente requería una ROM de opción para poder arrancar, ya que la BIOS de la placa base no incluía soporte para el dispositivo y, por lo tanto, no podía incorporarlo a su protocolo de arranque. Dicha ROM de opción interceptaba la interrupción de arranque de la BIOS (INT 19h) para interrumpir el cargador de arranque de la BIOS y sustituirlo por su propio cargador de arranque. El cargador de arranque de la ROM de opción intentaba arrancar desde un disco, red u otra fuente de programa de arranque conectada o instalada en la tarjeta adaptadora; si ese intento de arranque fallaba, pasaba el control al cargador de arranque anterior (al que apuntaba INT 19h antes de que la ROM de opción lo interceptara), lo que permitía al sistema arrancar desde otro dispositivo como estrategia de reserva. Algunas tarjetas adaptadoras, como ciertos adaptadores SCSI (por ejemplo, algunos fabricados por Adaptec ), estaban disponibles en versiones que solo se diferenciaban por la presencia o ausencia de la ROM de opción para permitir el arranque desde dispositivos SCSI conectados. Como resultado del protocolo de escaneo de la ROM de opción, la ROM de opción con la dirección más alta es la última en inicializarse y, por lo tanto, la última en interceptar cualquier interrupción y la primera en esas cadenas de rutinas de servicio de interrupción (ISR); por lo tanto, las direcciones de las ROM de opción determinan completamente la prioridad de arranque entre las tarjetas adaptadoras habilitadas para el arranque, y los dispositivos de arranque compatibles con la BIOS de la placa base tienen colectivamente la prioridad más baja, es decir, el sistema intentará arrancar desde ellos solo después de intentar arrancar desde todas las tarjetas adaptadoras habilitadas para el arranque.
Especificación de arranque del BIOS
La especificación de arranque del BIOS (BBS) fue desarrollada por un consorcio formado por Compaq , Intel y Phoenix Technologies para estandarizar la secuencia de inicialización de los BIOS Plug and Play (PnP) y las ROM de opciones. [ 3 ] Este estándar es compatible con la mayoría de los BIOS posteriores al año 2000. El estándar presenta la noción de una tabla de vector de conexión de arranque (BCV) y la prioridad de BCV. [ 3 ] Los principios fundamentales del estándar hacen que el comportamiento sea más definido y depurable, y brindan a los fabricantes de BIOS margen para dinamizar aún más la selección del dispositivo de arranque para el usuario, más allá de las sugerencias del estándar. El inicio del encabezado de expansión PnP está marcado por la firma ASCII$PnP de 4 bytes y un puntero a este se almacena en el desplazamiento +1Ah como un valor little endian de 2 bytes. [ 6 ]
Después de que se completan las comprobaciones POST básicas, el BBS especifica que la BIOS detectará y copiará todas las ROM de opción que residen en la BIOS en la región mencionada anteriormente y recorrerá el espacio de configuración PCI , llenando XROMBARs y copiando las ROM de opción de la tarjeta de expansión del espacio MMIO a la región. Luego, la BIOS escanea la región y, si la ROM de opción tiene un encabezado de expansión PnP, realiza una llamada lejana al desplazamiento +03h en el encabezado de la ROM de opción para inicializarlo. Luego vuelve a escanear la región después de que todas las ROM de opción PnP se hayan inicializado (porque, como indica el apéndice E, la rutina de inicialización de la ROM de opción puede haber encadenado más encabezados de expansión PnP para discos individuales que posee el dispositivo). Agrega el puntero BCV (si está presente) en los encabezados de expansión PnP que encuentra en la tabla BCV o el puntero BEV (si está presente) a la tabla de prioridad IPL. Luego, las entradas BCV en la tabla BCV se llaman según la prioridad configurable en NVRAM . La tabla BCV contiene numerosos punteros a funciones BCV, pero incluye una entrada fija que representa las ROM de opciones heredadas. Esta entrada apunta a una rutina de BIOS que llama a +03h en todas las ROM de opciones restantes que no tienen un encabezado de expansión PnP. La función BCV inicializa los ganchos INT 13h e INT 19h, lo cual, según el BBS, no debe realizarse en la rutina de inicialización en +03h. Si un dispositivo no tiene un encabezado de expansión PnP, puede ejecutar cualquier gancho en la rutina en +03h, ya que se trata de una tarjeta heredada.
En la rutina de inicialización inicial, como la ROM de opción apunta a una estructura de datos PCI (que no es la misma que el espacio de configuración), el código de la ROM de opción sabe que el ID del dispositivo y del proveedor está en un desplazamiento fijo desde RIP . El comienzo de esta estructura está marcado por la firma ASCIIPCIR de 4 bytes y un puntero a esta se almacena en el desplazamiento +18h como un valor little endian de 2 bytes. [ 6 ] Esto le permite escanear el espacio de configuración PCI para encontrar el dispositivo y los BAR correctos que necesita usar. Para evitar este escaneo, y en caso de dos tarjetas idénticas en el sistema, la BIOS pasa el PFA (bus/dispositivo/función) a la rutina de inicialización en AX, y el número de selección de tarjeta (CSN) para las ROM de opción ISA se pasa en BX. Luego puede interactuar con el dispositivo usando PMIO / MMIO para ver cuántos discos tiene y cuáles son arrancables leyendo el MBR . La BIOS ya habrá explorado el espacio de configuración, asignado las BAR y completado la tabla ACPI antes de la llamada a la rutina de inicialización, por lo que la ROM de opciones utilizará las direcciones asignadas a sus BAR. Sin embargo, el BCV intercepta rutinas de interrupción que interactúan con el dispositivo y que se ajustan en función de una ubicación de dirección MMIO base, la información del disco obtenida en la rutina de inicialización de la ROM de opciones y el número de disco actual en el BDA.
El procedimiento BIOS INT 19h utiliza la prioridad de la tabla IPL en la NVRAM para decidir si llamar a una entrada que contiene un controlador de arranque que leerá el MBR de 00h ( BAID del disquete ; el primer dispositivo en la tabla BCV que registra el disco 00h), una entrada que contiene un controlador de arranque que leerá el MBR de 80h (BAID del disco duro; el primer dispositivo en la tabla BCV que registra el disco 80h) o una de las entradas BEV de la tabla. Un dispositivo solo tiene una entrada BEV o BCV si es un dispositivo de arranque.
SCSI
Una tarjeta controladora SCSI puede interceptar la interrupción INT 13h, responsable de proporcionar servicios de disco. Si se trata de una tarjeta Plug and Play, lo hará en su BCV. Una vez realizada esta acción, cualquier llamada posterior a INT 13h será interceptada por la ROM de opciones SCSI (o BIOS SCSI), lo que le permite responder a los discos que puedan existir en el bus SCSI. Antes de interceptar la interrupción, es posible que no hubiera discos en el sistema, pero al interceptarla y modificar los valores devueltos, la BIOS SCSI puede hacer que todos los discos del bus SCSI sean visibles para el sistema.
En este caso particular, la propia BIOS puede llamar a INT 13h para proporcionar al usuario una lista de posibles dispositivos de arranque, y dado que la BIOS SCSI ha interceptado la interrupción, el usuario podrá elegir no solo los dispositivos de sistema estándar desde los que arrancar, sino también los discos SCSI. Esto se debe a que, como se sugiere en el Apéndice D de la Especificación de la BIOS de arranque, la BIOS podría completar la tabla IPL con información del dispositivo y del proveedor a partir de las llamadas a INT 13h a los diferentes discos, junto con el número de disco duro (80h, 81h...), para permitir el arranque desde cualquier dispositivo de disco duro, en lugar de solo desde el primer disco del primer controlador que intercepte INT 13h (el elemento de mayor prioridad en la tabla BCV), denominado Dispositivo IPL con reconocimiento de BIOS (BAID) en la especificación.
Varios controladores pueden interceptar la INT 13h simultáneamente. Por ejemplo, después del controlador SCSI, un controlador AHCI también puede interceptar la INT 13h llamando al controlador anterior, que el controlador SCSI almacenó en la IDT en la entrada 13h, al final de su propio controlador, antes de insertar la dirección de su propio controlador en la IDT en la entrada 13h. El primer controlador que intercepte la INT 13h verá que no se han instalado discos al comprobar el byte en 0040:0075, que reside en el Área de Datos del BIOS (BDA), y si tiene 4 discos para enumerar, asignará el rango de números de disco 80h–83h y almacenará '4' en la BDA. Si el segundo controlador que intercepte la INT 13h tiene 2 discos, leerá '4' de la BDA, asignará los números de disco 84h y 85h, y almacenará '6' en lugar de '4'. Ahora bien, si se llama a INT 13h con DL = 83h, el controlador del segundo controlador, que no asignó el número de disco 83h, reenviará la llamada al controlador anterior; este último, que sí asignó el número de disco 83h, gestionará la llamada. Con varias rutinas de servicio de interrupción (ISR) de controladores conectadas a INT 13h, cada ISR pasará el control a la siguiente hasta que la que asignó el número de disco especificado lo reconozca, gestione la llamada y finalice la interrupción.
ROM de arranque de red
Otra ROM de opción común es una ROM de arranque de red . La ROM de opción contiene el programa necesario para descargar el código de arranque. Las ROM originales de IBM Personal Computer interceptaban las interrupciones INT 18H (originalmente para invocar Cassette BASIC ) e INT 19H, ya que estas dos interrupciones se utilizaban para el proceso de arranque. INT 19H se llamaba para iniciar el proceso de arranque, e INT 18H se llamaba para iniciar Cassette BASIC desde la ROM cuando el proceso de arranque detectaba que ninguno de los dispositivos de arranque posibles era arrancable. Originalmente, al interceptar INT 18H, la ROM del adaptador de red intentaba arrancar desde la red cuando todos los demás dispositivos de arranque (disqueteras, discos duros, etc.) habían fallado. Al interceptar INT 19H, la ROM del adaptador de red intentaba arrancar desde la red antes que cualquier otro dispositivo. El BBS especifica que la ROM de opción de la NIC no intercepta INT 19H, sino que el controlador BIOS 19H debe llamar a BEV, que luego descargará el código de arranque.
Video
El BIOS de vídeo proporciona algunos servicios de visualización básicos para el BIOS y los sistemas operativos , por ejemplo, INT 10H (BIOS heredado), extensiones VESA BIOS (VBE) (BIOS heredado) y protocolo de salida gráfica UEFI (GOP). El BIOS original del IBM PC incluía soporte integrado para los adaptadores de vídeo IBM CGA y MDA (y no admitía ROMs de opción), por lo que esas tarjetas de vídeo no tenían ROMs de opción. El soporte para CGA y MDA en el propio BIOS se mantuvo a través de las líneas de productos IBM PC XT y PC AT (que sí admitían ROMs de opción), de modo que esas tarjetas funcionaban (con soporte completo del BIOS) en esas máquinas. La primera tarjeta adaptadora de vídeo para PC que tenía una ROM de opción fue la IBM EGA, introducida en 1984 con el IBM PC AT. (La tarjeta gráfica Hercules no tenía ROM de opción ni soporte de BIOS, excepto para sus funciones compatibles con MDA, para las cuales dependía del soporte MDA proporcionado por IBM en el BIOS principal). La mayoría de los adaptadores de vídeo para PC posteriores eran compatibles con ROM de opción, aunque las VGA y MCGA integradas en placas base PS/2 podían usar soporte de BIOS integrado. Una vez que las Super VGA (SVGA) integradas, integradas en placas base de PC clonadas, comenzaron a ser proporcionadas por empresas distintas a las de los propios sistemas, se hizo común que el BIOS de vídeo proporcionado por el fabricante de SVGA se incluyera como un módulo ROM de opción independiente en el mismo chip BIOS que el BIOS principal del sistema (proporcionado por una tercera empresa independiente).
ROMs de opción UEFI
Las ROM de opción UEFI utilizan la Interfaz de Firmware Extensible Unificada (UEFI). Varias imágenes de ROM de opción en un solo dispositivo pueden incluir tanto ROM de opción x86 heredadas como UEFI. Esta doble compatibilidad en los dispositivos permite su funcionamiento tanto en entornos BIOS heredados como en entornos UEFI modernos. Cuando el formato de la ROM de opción se establece en "Compatible con UEFI" en la configuración UEFI, la etapa del Entorno de Ejecución del Controlador (DXE) priorizará la carga de la ROM de opción UEFI si está presente. Si no hay una ROM de opción UEFI disponible, el sistema recurrirá a la ROM de opción heredada. Los sistemas UEFI pueden utilizar ROM de opción heredadas a través del Módulo de Soporte de Compatibilidad (CSM). Cuando el Arranque Seguro está habilitado, la ejecución de CSM y las ROM de opción heredadas está prohibida, ya que los controladores de firmware heredados no admiten la autenticación, lo que crea una posible vulnerabilidad de seguridad. [ 7 ]
Véase también
Referencias
- ↑ Referencia técnica del IBM PC XT (PDF) (Primera edición). IBM . Enero de 1983. págs. 2-10 .
- ↑ Referencia técnica de la interfaz BIOS del sistema personal/2 y del ordenador personal (PDF) (Primera edición). IBM . Abril de 1987. págs. 4-12 .
- 1 2 3 Especificación de arranque del BIOS (PDF) (Versión 1.01 ). Compaq, Phoenix e Intel. 11 de enero de 1996.
- ↑ "El entorno de ejecución de Etherboot" .
- ^ Salihun, Darmawan (9 de enero de 2007). Desmontaje de BIOS Ninjutsu descubierto (PDF) .
- 1 2 "BIOS" . 06-04-2022 . Consultado el 08-04-2022 .
- ↑ "Guía de la ROM de opción de validación UEFI" . Microsoft Learn . 14 de septiembre de 2022.
- BIOS