Techie
(usa Ubuntu)
Enviado em 20/01/2019 - 15:45h
Um pouco de história...
BIOS Legacy
Certamente a maioria, se não todos, já entraram nas telas de setup do BIOS de algum equipamento. Essas telas têm por finalidade a configuração de alguns controladores existentes na plataforma, como USB, ATA, SCSI, a configuração de algumas opções de segurança, a configuração do dispositivo a ser inicializado primeiro, entre outras opções. Mas vale lembrar que o BIOS não é só isso.
Vamos fazer um pequeno overview do que o BIOS deve fazer a partir do momento em que um dado equipamento é ligado (a sequência dessas tarefas depende de cada plataforma, portanto, vamos nos ater ao conteúdo e não à sequência):
1 - Limpar cache;
2 - Detectar memória RAM;
3 - Inicializar Stack;
4 - Configurar handlers SMM;
5 - Configurar registradores MSR;
6 - Configurar registradores MTRR;
7 - Inicializar Chipset (certamente uma das tarefas mais complicadas);
8 - Inicialização e Enumeração do barramento PCIe;
9 - Inicialização e Enumeração do barramento USB;
10 - Inicializar controladoras de HD (caso exista alguma configuração de RAID, essa tarefa fica ainda mais complicada);
11 - Montar a parte dinâmica do firmware (acpi);
12 - Inicializar frame buffer (vbios);
13 - Detectar firmwares externos e executá-los (Option ROM);
14 - Verificações de segurança em baixo nível (senha do BIOS, tamper, ...);
15 - Detectar dispositivos a serem inicializados (boot device selection);
16 - Mover o processador para modo protegido (na arquitetura Intel os processadores sempre são iniciados em modo real quando ligados);
17 - Preencher tabelas e820 (mapeamento de memória que é passado para o S.O.);
18 - Atualização de microcode (correção de erros do processador);
19 - Criação de handlers para as interrupções (por exemplo, a Int 15/AX=E820h, que retorna o mapeamento de memória);
20 - Preencher SMBIOS.
As etapas apresentadas são o mínimo necessário para que um bootloader ou SO tenha um local estável para se apoiar e executar seu trabalho. Como visto, não são poucas as tarefas.
Um dos agravantes é que tudo isso precisa ser feito em 1 MB de código, que é o máximo endereçável pela arquiteta x86 quando o processador está em modo real 16 bits (existente para fins de compatibilidade),
sendo este modo o modo padrão no qual o processador é iniciado ao ser energizado.
BIOS UEFI
Como visto anteriormente, as BIOS legacy possuem algumas limitações que de certa forma atrapalhavam a evolução das plataformas,
considerando o ambiente pré-OS. Para tentar resolver, ou ao menos diminuir essas limitações, foi criada a especificação EFI (Extensible Firmware Interface), que posteriormente passou a ser adotada por várias outras empresas e se tornou a especificação UEFI (Unified Extensible Firmware Interface).
O que aconteceu após a criação dessa especificação, encabeçada por grandes empresas como Intel, Apple, entre outras, foi a padronização das etapas de inicialização de um dado BIOS, bem como as interfaces as quais o mesmo deveria criar para poder ser consumido por aplicações e drivers para ambiente pré-OS. A essas interfaces foi dado o nome de UEFI Protocols (que não devem ser confundidos com protocolos de comunicação).
Outra especificação criada durante esse período foi a PI (Platform Initialization), que juntamente com a UEFI Spec, coloca ordem no grande caos existente na inicialização de plataformas "high end". Vamos nos ater à UEFI Spec, por enquanto nesse entendimento inicial desse novo mundo que acontece antes do SO/Bootloader.
Detalhes sobre cada etapa são explicados na especificação UEFI, que pode ser encontrada no site do órgão responsável por essas especificações, em
http://uefi.org/specifications.
a adoção da especificação UEFI causou grandes mudanças no BIOS, porém, abriu um novo mercado que é bastante explorado no exterior, principalmente nos Estados Unidos, Europa (mais precisamente Alemanha, França e Inglaterra) e Ásia.
Agora que sabemos os dois tipos de BIOS existentes atualmente, Legacy e UEFI, podemos verificar o avanço da tecnologia no tempo.
O que pode ser feito com tudo isso?
Exemplos de trabalhos que podem ser feitos com aplicações pré-OS:
Ferramentas de configuração de controladoras especificas (ex.: RAID);
Verificações de Rede antes do SO subir;
Execução de tarefas paralelas ao SO (SMM handlers).
Somente esses 3 itens já permitem a criação de inúmeros projetos, e em alguns casos, ideias inovadoras.
Outro ponto importante no ambiente pré-OS é que não existe diferenciação entre “User Mode” e “Kernel Mode”.
PORTANTO, APLICAÇÕES UEFI TÊM CONTROLE TOTAL DO HARDWARE, SEM TER QUE DISPUTAR RECURSOS COM OUTROS PEDAÇOS DE SOFTWARE, COM UM OVERHEAD MUITO MENOR.
Levando em consideração um axioma da área de segurança:
“Whoever touches the hardware first wins.”
Outra área que pode ser abordada com o desenvolvimento para ambiente pré-OS é o desenvolvimento de rootKits, seja para o bem ou para o mal, bem como outros pontos referentes à segurança, como drives encriptados.
Conclusão
Vemos que o UEFI incorpora avanços ao Legacy, com isso, se torna a melhor opção para os OSes. Vale lembrar que firmwares UEFI podem ser encontrados tanto em plataformas Intel quanto em plataformas ARM fabricadas após o ano de 2006.
Resumo adaptado de
https://www.embarcados.com.br/voce-sabe-o-que-e-bios/