Opção ROM - Option ROM

Uma ROM opcional é uma peça de firmware que reside no BIOS ou em uma placa de expansão, que fica sombreada na memória e executada para inicializar o dispositivo e registrá-lo com o BIOS. É essencialmente um driver que faz a interface entre os serviços BIOS e o hardware.

Especificação de inicialização do BIOS

A BIOS Boot Specification (BBS) foi desenvolvida por um consórcio formado por Compaq , Intel e Phoenix Technologies para padronizar a sequência de inicialização de ROMs opcionais do BIOS PnP e ROMs opcionais herdados que não estão em conformidade com o padrão BIOS PnP e a ordem em que engatam interrupções. O padrão apresenta a noção de uma tabela de vetor de conexão de inicialização (BCV) e de prioridade de BCV. Os princípios básicos do padrão tornam o comportamento mais definido e depurável e dá aos fabricantes de BIOS espaço para dinamizar ainda mais a seleção do dispositivo de inicialização para o usuário, além das sugestões do padrão.

Uma opção de ROM comum é o BIOS de vídeo, que é carregado logo no início do processo de inicialização e conecta INT 10h para que a saída do autoteste de inicialização (POST) possa ser exibida. O BIOS de vídeo está quase sempre localizado no C000segmento de memória, o início da área de memória reservada para ROMs opcionais; isso ocorre porque quando a placa-mãe tem um controlador VGA embutido, a opção ROM fica no BIOS - o BIOS sabe onde está e o guarda na memória em um tempo fixo. Outros ROMs podem ser localizados desde segmentos C800até os F400primeiros PCs. O endereço de pesquisa final foi eventualmente limitado a E000produtos posteriores. A especificação de inicialização do BIOS requer que os ROMs opcionais sejam alinhados aos limites de 2kB (por exemplo C800, C880, C900, C980, segmentos , etc.). Os primeiros dois bytes da ROM devem ser 55 AA.

Depois que as verificações básicas do POST são concluídas, o BBS especifica que o BIOS detectará e sombreará todos os ROMs opcionais que residem no BIOS na região mencionada e atravessará o espaço de configuração PCI , preenchendo XROMBARs e copiando os ROMs opcionais da placa de expansão de Espaço MMIO para a região. O BIOS então varre a região, e se a opção ROM tiver um cabeçalho de expansão PnP, ele faz uma chamada distante para offset + 03h no cabeçalho da opção ROM para inicializá-lo. Em seguida, ele verifica novamente a região depois que todas as ROMs opcionais PnP foram inicializadas (porque, como afirma o apêndice E, a rotina de inicialização da ROM opcional pode ter encadeado mais cabeçalhos de expansão PnP para discos individuais que o dispositivo possui). Adiciona o ponteiro BCV (se presente) aos cabeçalhos de Expansão PnP e encontra a Tabela BCV ou o ponteiro BEV (se presente) para a tabela de prioridade IPL. As entradas de BCV na tabela de BCV são então chamadas de acordo com a prioridade alternável na NVRAM . A tabela BCV está cheia de ponteiros de função BCV, mas tem uma entrada fixa representando ROMs de opção legada que é um ponteiro para uma rotina de BIOS que chama + 03h em todas as ROMs de opção restantes que não têm um cabeçalho de expansão PnP. A função BCV inicializa os ganchos INT 13h e INT 19h, que o BBS estipula não deve ser feito na rotina de inicialização em + 03h. Caso um dispositivo não possua cabeçalho de Expansão PnP, ele pode realizar qualquer gancho na rotina em + 03h, por se tratar de uma placa legada.

Na rotina de inicialização inicial, como a ROM opcional aponta para uma estrutura de dados PCI (diferente do espaço de configuração), o código da ROM opcional conhece o dispositivo e o ID do fornecedor está em um deslocamento fixo do RIP . Isso permite que ele varra o espaço de configuração PCI para encontrar o dispositivo correto e os BARs que ele precisa usar. Para evitar esta varredura, e no caso de duas placas idênticas no sistema, o BIOS passa o PFA (barramento / dispositivo / função) para a rotina de inicialização no AX, e o número de seleção da placa (CSN) para ROMs de opção ISA é passado BX. Ele pode interagir com o dispositivo usando PMIO / MMIO para ver quantos discos ele possui e quais são inicializáveis ​​lendo o MBR . O BIOS já terá vasculhado o espaço de configuração, alocado os BARs e preenchido a tabela ACPI antes da chamada da rotina de inicialização, de forma que a opção ROM usaria os endereços alocados para seus BARs. O BCV, no entanto, engancha rotinas de interrupção que interagem com o dispositivo que são ajustadas com base em uma localização de endereço MMIO base, informação de disco apurada na rotina de inicialização de ROM opcional e o número de disco atual no BDA.

O procedimento BIOS INT 19h então usa a prioridade da tabela IPL na NVRAM para decidir se deve chamar uma entrada contendo um gerenciador de inicialização que lerá o MBR de 00h (disquete BAID; o primeiro dispositivo na tabela BCV a registrar o disco 00h), um entrada contendo um gerenciador de inicialização que lerá o MBR de 80h (o BAID do disco rígido; o primeiro dispositivo na Tabela BCV a registrar o disco 80h) ou uma das entradas BEV na tabela. Um dispositivo só tem um BEV ou um BCV se for um dispositivo inicializável.

SCSI

Uma placa controladora SCSI pode conectar INT 13, que é responsável por fornecer serviços de disco. Ele o fará em seu BCV se for um cartão PnP. Uma vez feito isso, quaisquer chamadas subsequentes ao INT 13h serão "capturadas" pela ROM opcional SCSI (ou "BIOS SCSI"), permitindo que ela responda por discos que possam existir no barramento SCSI. Antes de conectar a interrupção, pode não haver discos no sistema, mas ao interceptar a interrupção e alterar os valores retornados, o BIOS SCSI pode tornar todos os discos no barramento SCSI visíveis para o sistema.

Neste caso particular, o próprio BIOS pode chamar INT 13h para fornecer uma lista de dispositivos de inicialização possíveis para o usuário, e porque o BIOS SCSI conectou a interrupção, o usuário será capaz de escolher não apenas de quais dispositivos de sistema padrão inicializar, mas também quais discos SCSI. Isso ocorre porque, conforme sugerido no Apêndice D da Especificação do BIOS de inicialização, o BIOS pode preencher a tabela IPL com informações do dispositivo e do fornecedor de chamadas INT 13h para os diferentes discos, emparelhados com o número do disco rígido (80h, 81h ...) , para permitir que qualquer dispositivo de disco rígido seja inicializado a partir de, ao invés de apenas o primeiro disco do primeiro controlador para conectar INT 13h ser inicializável (o item de prioridade mais alta na tabela BCV), referido como um dispositivo BIOS Aware IPL (BAID) na especificação.

Vários controladores podem conectar INT 13h de uma vez. Por exemplo, após o controlador SCSI, um controlador AHCI também pode ligar INT 13h colocando uma chamada para o manipulador anterior, que foi armazenado no IDT na entrada 13h pelo controlador SCSI, no final de seu próprio manipulador, que então coloca no IDT na entrada 13h. Se INT 13h for chamado com DL = 83h, o controlador que atribuiu um intervalo de disco contendo 83h responderá, caso contrário, ele irá pular e chamar o manipulador anterior. O primeiro controlador a conectar INT 13h verá que 0 discos foram instalados verificando o byte em 0040:0075, que reside na BIOS Data Area (BDA), e se houver 4 discos para enumerar, ele atribuirá o intervalo 80h – 83h e armazene '4' no BDA.

ROM de inicialização de rede

Outra opção comum de ROM é uma ROM de inicialização de rede . A opção ROM contém o programa necessário para baixar o código de inicialização. As ROMs originais do computador pessoal IBM engancharam INT 18H (originalmente para invocar o Cassette BASIC ) e INT 19H, já que essas duas interrupções foram designadas quando o processo de inicialização estava prestes a começar. INT 19H é chamado para iniciar o processo de inicialização, enquanto INT 18H é chamado quando o sistema tenta inicializar de todos os dispositivos possíveis e nenhum era inicializável. Originalmente, ao ligar o INT 18H, o sistema invocaria o Cassette BASIC (se presente) ou tentaria inicializar a partir da rede quando todos os outros dispositivos de inicialização (unidades de disquete, discos rígidos, etc.) falharam. Ao conectar o INT 19H, o sistema tentaria inicializar a partir da rede antes de quaisquer outros dispositivos. O BBS especifica que a opção ROM da NIC não conecta 19h, em vez disso, o manipulador do BIOS 19h deve chamar o BEV, que fará o download do código de inicialização.

Vídeo

O BIOS de vídeo fornece alguns serviços básicos de exibição para BIOS e sistemas operacionais , por exemplo INT 10H (BIOS legado), VBE (BIOS legado) e UEFI GOP .

UEFI Option ROMs

A especificação PCI permite várias imagens de ROM de opção no mesmo dispositivo. Essas opções de ROMs podem ser Legacy x86 e UEFI. Se o formato da ROM opcional for definido como "Compatível com UEFI" na configuração UEFI, o estágio DXE carregará a ROM da opção UEFI mais recente, se houver, e a ROM da opção herdada, se não houver. A UEFI pode usar ROMs de opção herdada quando um Módulo de Suporte de Compatibilidade (CSM) está habilitado. Observe que, quando a inicialização segura está ativada, a execução do Módulo de suporte de compatibilidade e ROMs opcionais legados é proibida porque os drivers de firmware legados não suportam autenticação, o que é uma ameaça à segurança.

Veja também

Referências