Boot Signature - BIOS

3

Eu entendo que o BIOS está em ROM, e o fabricante "tipicamente" projeta isso para apontar para o primeiro setor do primeiro setor do dispositivo de armazenamento "ativo" ou CHS (0,0,1) * físico e CHS (0 , 0,0) * lógica que é um MBR ou VBR com base na sua preferência de particionamento.

Wikipedia:

The presence of an IBM PC compatible boot loader for x86-CPUs in the boot sector is by convention indicated by a two-byte hexadecimal sequence 0x55 0xAA (called the boot sector signature) at the end of the boot sector (offsets 0x1FE and 0x1FF). This signature indicates the presence of at least a dummy boot loader which is safe to be executed, even if it may not be able to actually load an operating system.

A assinatura de inicialização identifica o gerenciador de inicialização usando uma sequência hexadecimal de dois bytes, então estou supondo que a assinatura deva ser um deslocamento no mesmo setor? Portanto, supondo que o carregador de boot deva estar nesse mesmo setor?

    
por Jordan Davis 21.09.2015 / 17:33

2 respostas

6

A ordem básica de operações que acontece enquanto um BIOS está tentando encontrar algo para inicializar é:

  1. Carregue o primeiro setor (512 bytes) do dispositivo que você está tentando inicializar (HDD, SSD, Floppy Disk, Disco Óptico, etc.) na memória
  2. Verifique se os 511 e 512 bytes são 0x55 e 0xAA, respectivamente.
    • Se não, volte ao passo 1 e tente o próximo dispositivo ou desista se não houver mais.
    • Se sim, comece a executar o código no início deste setor, passando o controle para (esperançosamente) um gerenciador / gerenciador de inicialização.

Você pode encontrar a página wiki do OSDev na Seqüência de Inicialização útil. A página do MBR também tem uma tabela útil explicando o layout desse primeiro setor. Eu recriou aqui com alguma simplificação:

Offset | Size (bytes) | Description
    0  | 436          | MBR Bootstrap (flat binary executable code) 
0x1b4  |  10          | Optional "unique" disk ID
0x1be  |  64          | MBR Partition Table, with 4 entries
0x1fe  |   2          | (0x55, 0xAA) "Valid bootsector" signature bytes

Observe que o BIOS não necessariamente presta atenção ou sequer sabe sobre o ID do disco ou a tabela de partições.

    
por 21.09.2015 / 18:38
0

O código do BIOS está na ROM (ou EEPROM nos dias de hoje). Ele carrega o primeiro setor do disco (# 0 na notação LBA ou c = 0, h = 0, s = 1 na notação CHS), verifica se os dois últimos bytes são 0x55 e 0xAA e transfere o controle para esse setor.

Então, o MBR é realmente identificado por seu endereço, # 0. E a assinatura de 55 AA é apenas para verificação . Se o primeiro setor for preenchido com zero (como no caso de novos HDDs), o BIOS pode detectar isso faltando 55 assinaturas AA e tentar inicializar a partir de outro disco, ou PXE ou ROM BASIC, ou qualquer outra coisa.

0x55 0xAA não é um deslocamento de MBR, o deslocamento real é zero.

    
por 21.09.2015 / 18:37