Inicialização do kernel no modo UEFI

1

Ao usar o antigo BIOS legado (considere a arquitetura X86), o carregador de boot salta para um local no kernel do modo real (deslocamento 512 que é definido no arquivo de montagem header.S) e inicia o código de modo real. O código de modo real, em seguida, prepara uma pilha e heap e salta para main.c novamente no modo real. E quanto ao mecanismo de inicialização do UEFI? O código do kernel do modo real ainda é usado? O gerenciador de partida pula para a mesma parte do header.S e dá controle para o mesmo código no modo real? Mais exatamente, qual é a diferença de inicialização do kernel no momento em que o carregador de boot pula para o código OS entre a inicialização do BIOS legado e o boot UEFI?

    
por user2808671 18.08.2017 / 12:24

1 resposta

2

O código de modo real não é usado quando o mecanismo EFI stub é usado. O firmware (executado a partir da ROM flash na placa-mãe quando a máquina é inicializada) muda o processador para o modo protegido antes de carregar a imagem do kernel. O cabeçalho da imagem do kernel é construído para se parecer com um executável PE conforme exigido pela especificação UEFI. Para obter mais informações, consulte este artigo da Intel .

Editar : adicionou algumas informações exigidas no comentário abaixo. arch/x86/boot/header.S contém as definições que fazem o arquivo parecer um binário PE quando compilado com CONFIG_EFI_STUB . O firmware chama o ponto de entrada colocado no cabeçalho; o ponto de entrada é efi_pe_entry in arch/x86/boot/compressed/head_64.S . Essa rotina chama make_boot_params e efi_main em arch/x86/boot/compressed/eboot.c . O primeiro constrói uma estrutura boot_params e também carrega um initramfs se especificado na linha de comando. A linha de comando do kernel também é tratada de maneira diferente: o UEFI cuida disso também, mas como o UEFI usa cadeias codificadas UCS-2 (um subconjunto do Unicode), elas são convertidas em ASCII. Tanto header.S quanto head_64.S contêm muito código comum entre o stub EFI e o modo tradicional de inicialização.

A UEFI pode um dia tornar possível a remoção do Real Mode em processadores x86 para sempre. É usado apenas para inicializar sistemas operacionais modernos.

    
por 18.08.2017 / 18:57