UEFI

uefi-logo_00FA000001268581

Antes de comecar essa matéria, eu gostaria de esclarecer 3 pontos:

1. A UEFI NÃO é da Microsoft ;)
2. Com a UEFI o usuário de Linux SÓ TEM A GANHAR.

O que é a EFI/UEFI?

A Extensible Firmware Interface (EFI) e Unified Extensible Firmware Interface (UEFI),  nasceu em 1990 com o projeto chamado Intel Boot Initiative e passou a ser chamada de EFI para computadores HP o que define outra arquitetura, permite o suporte de gerenciamento da firmware de maneira consolidada, possibilidade de arrancar a partição de boot do sistema operacional sem depender de OS LOADER para isso, segurança para o gerenciamento de boot, shell de comandos, extenções para o CPU e OS  e sem as velhas limitações da BIOS, ainda encontrado em hardware PCX86, entre outras como o antigo modo 16-bits, espaço de endereçamento de 1MB (o que vc ainda vê como opção de instalação em distribuições Linux para máquinas com EFI para conseguir um suporte a sua leitura pela área de compatibilidade), dependências de hardware PC AT, limite da tabela de partições que se limita a primárias, extendida e lógicas, e o famoso MBR (aquela área de 512b) e outros.

A EFI inicialmente veio com os processadores H9000 e ITANIUM, para o sistema operacional HP-UX (o UNIX da HP), tal como suporte ao novo OpenVMS que também (hoje) é suportado nesta arquitetura de processadores. A UEFI veio depois e em 2004 para 2005 e se tornou UEFI, como uma versão atualizada da EFI da intel pela Unified EFI Forum.  Esta,ou UEFI.org é uma organização e comunidade que trabalha no seu desenvolvimento até hoje, possui várias empresas colaboradoras que trabalham no seu desenvolvimento, tais como a IBM, AMD, HP, Insyde, Intel, Microsoft, Lenovo, Phoenix, Dell, Apple, American Megatrends e outros pequenos colaboradores, pois o projeto EFI é aberto para novos colaboradores que definem padrões e criam suporte ao seu sistema operacional e devices. Nela, você pode, antes do sistema operacional ser carregado começar a programar e alterar todos os seus cabeçalhos de registros. Mas entenda, existe uma grande diferença do desenvolvimento de cada uma delas, apesar do seu kernel ser o mesmo, mas fica a caracter do fabricante remover alguns modulos ou não utilizar todos os seus recursos e por isso não ocorre uma certa padronização na firmware, apesar de que isso ja acontece com a BIOS a anos. A EFI da HP para arquitetura ITANIUM é uma das melhores para mim, outra excelente e bem automática sem muitas opções é a Apple EFI sendo bem diferente das UEFI que é fornecida pelos fabricantes.

Resumindo: a EFI/UEFI é uma firmware com recursos que se integram a firmware da máquina, como a BIOS, SMC, iLO e outras.

 

Mas e a Microsoft, onde ela entra nisso?

A Microsoft também é colaboradora do projeto e apenas contribui para que o seu sistema operacional com o nome de Windows (rsrs), suporte os  seus recursos. Na verdade a unica posição da Microsoft nisso é homologar a EFI/UEFI ao seu produto o que desde a época do Windows Vista ja possui suporte. Lembrando que o Linux desde tempos ja possui esse suporte, antes da Microsoft sonhar em ter. Por isso que é possivel hoje alguem instalar o Windows diretamente no Mac, sem a necessidade da emulação de tabelas de particionamento do tipo msdos pelo bootcamp.

Desde o Windows Vista/7/2008 ele possui o recurso de conversão de partições do tipo msdos (MBR), para EFI GPT com suporte extendido a mais de 2TB de partição e de volumes. (o que veremos mais a frente),

Recursos de Boot

A EFI/UEFI possui recursos de boot como ja mencionado, nao depende mais das velhas leituras e concorrencia de distribuição de endereçamentos de interrupção, áreas de memoria ativas, leitura de disposivos como teclado, mouse, VGA de forma separada e agora todos os recursos são distribuidos para o sistema operacional mesmo que ainda é mantido que a firmware faça a leitura de tudo, como um sistema operacional independente, mas existe a divisão de papeis aqui e da maneira como cada um passa a informação para o sistema operacional ou como o sistema operacional consulta isso. No caso da EFI nao se depende mais de BOOTLOADERS como o grub. Não existe mais essa dependencia de estágios de boot pois a própria EFI possui uma área de boot que pode ser registrada em até 200MB que contém a leitura de todo o seu cabeçalho de partiçoes e a mesma sabe qual deve arrancar baseando-se nas informações de GIUD e para onde o mesmo apontar. Faça uma conjectura com o UUID e o novo entendimento do /etc/fstab, o que voce pode também consultar com o comando blkid.

Possui também um suporte extenssivo para o boot com recursos de segurança chamado SECUREBOOT, implementado na UEFI desde as versões 2.2.1 e esta disponível para qualquer sistema operacional, desde que o seu núcleo possua recursos para essa implementação.

 

Aproveitando, recursos de particionamento e posição.

Outra GRANDE VANTAGEM é que se voce tem um disco acima de 2TB, a BIOS não vai entender e então é necessário utilizar o recurso  chamado Identificador Único Global ou GUID ou GPT que permite ter uma extenssiva leitura da tabela de particionamento do seu disco e entender além de 2TB para uma única partição. No Linux o fdisk e o cfdisk nao suportam essa tabela sendo necessário utilizar do gparted para isso.

O esquema de partições da MBR pelo antigo formato da BIOS, inserem a informação de particionamento na própria tabela principal de boot, ou nos registros de boot do MBR e isso acontece de forma limitada sendo até 4 partições primárias e havendo a necessidade de mais, dar-se a partição extendida para a criação das unidades lógicas de particionamento o que é padrão em outras arquiteturas como a área extendida oferecida pela EFI, como ja acontece no mundo POWER da IBM, Apple e outras arquiteturas. No formato GPT da EFI Firmware e recursos, a informação da tabela de particionamento são armazenados nos cabeçalhos GPT e NÃO no setor de boot como no antigo e mal criado MBR (que era limitado em 512b). NO caso do GPT os cabeçalhos são como particões primárias que arrancam o boot do sistema operacional ou partição de boot. Clique ao lado para ver a imagem das diferenças das áreas de particionamento MBR vs GPT: http://www.anchor.com.au/blog/wp-content/uploads/2012/10/partitioning.png

 

A EFI possui um shell específico.

O mais interessante e mais poderoso são os comandos integrados pelo EFI SHELL, que encontra-se no bom e velho da HP e também pode ser habilitado nas plataformas Apple ou x86/PC. Em algumas somente com o programa de extensões, como o rEFInd/rEFIt que permite habilitar os recursos da shell que foram removidos pelo famoso forum de OEM para essa plataforma, pois muitos dos fabricantes não acham necessário, mas são, pode ter certeza disso. Os comandos auxiliam o administrator a operar as informações do hardware como controladoras SMART ARRAY, discos, SCSI, mapeamento de memória e sistema operacional. Isso é muito importante você saber, outro exemplo são para hardwares da SUN/Oracle com o processador SPARC que não tem BIOS e nem EFI e sim a OpenBoot. Para arrancar um boot no CD no SPARC é necessário interromper o bootstrap com STOP+A do teclado da SUN e entrar no modo shell para digitar o comando: ok boot cdrom

Entende que isso vai muito alem do que um simples menuzinhos para o dualboot?

 

Mas e o Linux, tem como empresas como a Microsoft usar disso como algo devastador?

Se amanha voce ouvir aquela historinha de “Microsoft-FAN-BOY” disfarçados de “Linux-Users” que andam inventando que a Microsoft vai acabar com a instalação de Linux nas máquinas x86, simplismente entenda que voce pode habilitar ou entrar no modo shell da EFI e através do comando “map -r” e com a leitura do CD em “fs0”, forçar a leitura de todos os dispositivos novamente e então selecionar a área permissiva de boot através do arquivo de EFI, seja um CD, DVD, USB e partir disso, arrancar a instalação do OUTRO sistema operacional. A Microsoft so parece dificultar, devido a padronização do Windows com a UEFI e do mercado do WindowsOS ser bem maior, apenas isso. Entenda como um “problema filosófico”, que ataca a ignorância de muitos. Mas que esse pessoal so fala besteira, fala. Me recordo que a Microsoft colocou a anos atras uma enquete de quem conseguia colocar o Linux no XBOX, tarefa que foi vencida rapidamente, tal como linux para iphone, iPad e outros devices.

TODA implementação de EFI/UEF é constituída do Boot Order Menu e Boot Order Option List, que permite a escolha do arranque do sistema operacional, independente do que o OS pode fazer para que essa configuração seja sim ou não acessível.  Alguns comandos úteis: map para leitura das áreas de boot como disco, cdrom, usb, exit para sair do boot menu, cls para limpar a tela, edit para editar algum texto em asci, drvcfg -v ou com -s para entrar na área de configuração da efi como acessar os discos e criar arranjos de raid pela smart controller, bcfg boot que permite editar as entradas da UEFI NVRAM e permite definir padrões de bootstrap do EFI OS.

Alem do Shell da EFI voce também pode acessar o modo fs0, ou “BMC/ iLO (integrated Lights-Out) management System Console”, que gerencia o UEFI System Partition, que pode ser acessado pelo comando fs0:, que possui um sistema de arquivos muito próximo do MSDOS e comandos. Geralmente o fs0 é o CDROM e o fs1 o disco, depende muito do resultado do comando map.

Para entrar no modo BMC de comandos, digite: fs0: (e enter)

Essa área é criada como uma memoria volátil e entendida como a BMC/EFI OS e possui um FHS próprio (bem identico ao MSDOS com o sistema de arquivo em FAT), além de possibilitar a leitura do arquivo mais importante o \EFI\BOOT\boot[architecture name].efi, sendo o um padrão de arquivo com a extenção .efi que contém o MAPEAMENTO correspondente para um boot em máquinas com a EFI. Sobre o arquivo, é inclusive um dos que o seu CD Linux, geralmente esta armazenado na imagem do CD, pois se não tiver nao adianta, nao vai da certo. Hoje, todo ISO de Linux tem e isso ja a bastante tempo, como no Ubuntu e no Fedora que encontramos no diretório boot/efi do seu CD, afim de encontrar arquivos como boot.efi e grubia32.efi ou grubx64.efi. Esses arquivos seguem a arquitetura da máquina sendo claro que os mencionados não funcionam em processador Itanium2, sendo 1 arquivo por arquitetura para o arranque do boot da mídia, seja CD ou USB. Entenda que para 1 CD dar um arranque em uma determina arquitetura como um Playstation3, IBM POWER, arm é necessário ter um arquivo de leitura da firmware?

INCLUSIVE, no proprio sistema do mal, ops, no Windows a própria Microsoft atraves do technet passa essa visão avançada para os seus usuários e administradores, como voce pode ver em: http://technet.microsoft.com/en-us/library/dd744321(v=ws.10).aspx

No Linux, caso voce queira utilizar do seu shell ou criar uma imagem com o suporte a EFI segue os arquivos abaixo:

32 BITS
https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/ShellBinPkg/UefiShell/Ia32/Shell.efi

64 BITS
https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/ShellBinPkg/UefiShell/X64/Shell.efi

Apos seguir com os procedimentos você ainda pode verificar a sua release com o comando: efibootmgr –verbose

 

Segue os comandos do EFI Shell (Vc consegue a mesma tabela com o help)

Shell Boot Commands
==================================================
autoboot     — View or set autoboot timeout variable
bcfg         — Displays/modifies the driver/boot configuration
boottest     — Set/View BootTest bits
clearlogs     — Clears FPL and SEL logs
dblk         — Displays the contents of blocks from a block device
lanboot     — Performs boot over lan from EFI Shell
mount         — Mounts a file system on a block device
reset         — Resets the system
tftp         — Tftp to a bootp/dhcp enabled unix boot server
vol         — Displays volume information of the file system
Shell  Configuration Commands
==================================================
cpuconfig     — Deconfigure or reconfigure cpus
date         — Displays the current date or sets the systemdate
err         — Displays or changes the error level
esiproc     — Make an ESI call
errdump     — View/Clear logs
info         — Display hardware information
monarch     — View or set the monarch processor
palproc     — Make a PAL call
salproc     — Make a SAL call
time         — Displays the current time or sets the system time
ver         — Displays the version information
Shell Device Commands
=================================================
baud         — Set serial port com settings
connect     — Binds an EFI driver to a device and starts the driver
devices     — Displays the devices being managed by EFI drivers
devtree     — Displays the tree of devices of the EFI Driver Model
disconnect     — Disconnects one or more drivers from a device
dh         — Displays the handles in the EFI environment
drivers     — Displays the list of drivers of the EFI Driver Model
drvcfg         — Invokes the Driver Configuration Protocol
drvdiag     — Invokes the Driver Diagnostics Protocol
guid         — Displays all the GUIDs in the EFI environment
lanaddress     — Display LAN MAC addresses
load         — Loads and optionally connected EFI drivers
loadpcirom     — Loads a PCI Option ROM
map         — Displays or defines mappings
openinfo     — Displays the protocols on a handle and the agents
optload     — Lists all optional ROM-based efi drivers and apps
pci         — Displays PCI devices or PCI function config space
reconnect     — Reconnects one or more drivers from a device
unload         — Unloads a protocol image
Shell Memory Commands
=================================================
default         — Sets, Resets, or Clears default NVM values
dmpstore     — Displays all NVRAM variables
dmem         — Displays the contents of memory
memmap         — Displays the memory map
mm         — Displays or modifies MEM/IO/PCI
pdt         — View or set page deallocation table
Generic Shell Commands
===================================================
alias         — Displays, creates, or deletes aliases in the EFI shell
attrib         — Displays or changes the attributes of files or directories
cd         — Displays or changes the current directory
cls         — Clears the standard output with an optional background color
comp         — Compares the contents of two files
cp         — Copies one or more files/directories to another location
edit         — Edits an ASCII or UNICODE file in full screen
eficompress     — Compress a file
efidecompress     — Compress a file
exit         — Exits the EFI Shell
help         — Displays help menus, command list, or verbose help of a command
hexedit     — Edits with hex mode in full screen
ls         — Displays a list of files and subdirectories in a directory
mkdir         — Creates one or more directories
mode         — Displays or changes the mode of the console output device
mv         — Moves one or more files/directories to destination
rm         — Deletes one or more files or directories
set         — Displays, creates, changes or deletes
EFI environment variables
==================================================
setsize     — Sets the size of the file
touch         — Updates time with current time
type         — Displays the contents of a file
xchar         — Turn on/off extended character features
Shell Script Commands
====================================================
echo        — Displays messages or turns command echoing on or off for/endfor — Executes commands for each item in a set of items
goto         — Makes batch file execution jump to another location if/endif — Executes commands in specified conditions
pause      — Prints a message and suspends for keyboard input
stall        — Stalls the processor for some microseconds
====================================================
efi.shell

 

 

 

 

 

 

 

 

Arquiteturas e diferenças? Só tem EFI mesmo?

Existe as extenções de boot e recursos que ela pode fornecer para a FIRMWARE do hardware, como para o proprio sistema operacional. No caso de servidores e workstations da HP com o processador HP9000 e ITANIUM/IA64/IA2 compõe da EFI e iLO firmware.

Em máquinas Apple como Mac PPC e Mac Intel, ambas com a EFI, possui integração da firmware SMC (E NÃO BIOS), o que voce pode observar na imagem abaixo (as 2 são atualizadas juntas).

Em máquinas x86 padrão PC, a UEFI varia de acordo com o seu fabricante e sempre estão com os seus recursos compartilhados com a velha BIOS, até alguem mudar esse padrão. Mas a UEFI presente no hardware, remove as limitações da BIOS, desde que voce não opte por utilizar somente a BIOS como prioridade. E pra que voce vai fazer isso? Pra que voltar ao velho formato de particionamento baseado em msdos?

Em máquinas x86, a EFI abstrai a BIOS como o sistema operacional através de módulos do seu kernel. É realizado o mesmo procedimento de bootstrap como em outras arquiteturas em forma diferente devido a diversidade de fabricantes e integrações independentes. Os procedimentos de leitura de chaves de segurança e GUID acontecem de forma normal e dando a continuidade a leitura e pré-inicialização chamada de PEI, a verificação do DXE que é composto de drivers para seus componentes instalados na máquina, tal como um simples CDROM, o BDS Boot Developer Sequence que é responsável por verificar os cabeçalhos de boot e registros para que aconteça normalmente, também o TSL System Load que é carregado junto com o seu OS LOADER se houver e definitivamente o processo de bootstrap do sistema operacional, seja Linux, BSD, Windows, OSX e outros com suporte.

Lembre-se, como ja foi dito ai em cima você pode arrancar a configuração do EFI Shell através do rEFInd/rEFIt e criar vários setores de boot, pois como a prioridade é apenas uma, além da escolha do sistema mono-usuário, voce pode alterar os registros primários de boot para apontar para o refind que vai então, gerenciar o dual boot normalmente. SE caso o seu fabricante ja colocou a disponibilidade de shell-efi integrado no seu hardware, então voce nem precisa disso, é só fazer.

NOVAMENTE, a EFI nao limita ao GRUB, ou seja qual for o OS LOADER para registrar na sua área prímária de boot. Uma vez instalado, uma vez instalado!

Por isso as distribuições Linux e sistemas UNIX, como o OSX, criam uma área de boot para as partições EFI GPT de 200MB. Isso é um pré-requisito e você pode observar na imagem abaixo.

Mas e em tablets como o surface da Microsoft? Consigo instalar o Linux?

Sim é CLARO! Os procedimentos são os mesmos com a única diferenca que muitos dos fabricantes de mobile (smartphones) e tablets utilizam de registros de comandos físicos para arrancar modos de reparação ou instalações de firmware e OS. Em todos os tablets existe o famoso “aperte o butao A + B + C + D e entre no modo recovery de instalação”, e é dalí que tudo isso é possível, desde um boot por USB e download de firmware por PXE. GERALMENTE os atalhos para a EFIBoot ou boot no EFI SHELL é a combinação de BOTÃO POWER + Volume para cima do seu aparelho. Todos eles tem 1, pois o sistema operacional nao brotou la dentro, acredite! Consulte o seu fabricante ou forums support dos mesmos.

Geralmente o Windows 8 possui recursos integrados direto com a firmware EFI para o gerenciamento de boot. A imagem abaixo voce vê uma das telas como mencionei antes. Como até mesmo desabilitar o secureboot. (ja mencionei também no texto acima sobre a participação da Microsoft no UEFI FORUM).

Ahh sobre o Microsoft Surface RT, ja existe o que o xda chama de jailbreak para ele o que permite entrar no seu menu e modo de “debug” e então forçar um boot no USB e instalar o Ubuntu, por exemplo. Quem tiver esse lixo e quiser realizar essa operação.
segue a materia: http://forum.xda-developers.com/showthread.php?t=2092158

E da mesmo? Sim olha a telinha dele ai como fica (foto)

Mas e o SECUREBOOT? 

Afinal, segurança nunca é demais né? E isso é uma não conformidade séria e que precisa ser tratada. DE NOVO, O SECUREBOOT NAO É DA MICROSOFT ;) A UEFI teve um recurso de segurança SecureBoot implementado na versão 2.3.1 (stable), cujo ja acompanha diversas outras arquiteturas como ARM, Mac, HP P900, Integrity Ia2 e outras RISC. O secureboot utiliza recursos como Key Management Service (KMS) e Storage Security Command Protocol for encrypted HDD da UEFI.

Protege o sistema de boot (área) através de chaves, sendo seguro e confiável para os recurso de boot do sistema operacional e seu bootsstrap. O Linux, como o Windows e o OSX ja possúem suporte ao SecureBoot, sendo que o secure boot é OPCIONAL E PODE SER DESATIVADO, o que não acontece com MAC e alguns dispositivos mobile. Até o gerenciador de boot de dispositivos Android como o NExus 4 possui o SecureBoot.

E como desabilitar o secure boot  caso seja necessário? Você pode desabilitar por hardware ou sistema operacional. A imagem abaixo é de um dos fabricantes, existem plataformas com menu gráficos. Para desabilitar dentro do Windows 8, voce pode digitar o comando confirm-SecureBootUEFI dentro do terminal, sendo que uma vez digitado habilita, novamente desabilita.
Ver imagem: http://www.aprigiosimoes.com.br/secureboot.png

Vale lembrar que o Kernel ja possui suporte ao SecureBoot e caso voce um dia ative, poderá bloquear as instalações de Windows seguindo o processo totalmente ao contrario do que andam falando do Linux. Ou com a instalação do último sistema operacional, remover definitivamente a chave de acesso a partição do boot do outro e removendo totalmente o seu boot e instalação. A solução, não ative o recurso de secure boot quando for optar infelizmente para um dualboot com o Windows8.

Vale lembrar que o grub2, como o grub-efi e o antigo elilo ja tem suporte a anos a EFI, dando um banho de suporte no fraco Windows.

Mas, segue o meu conselho, SE LIBERTE de vez e não use dualboot, use apenas Linux.

Aprígio Simões
Linux é o poder. 

Powered by Moblie Video for WordPress + Daniel Watrous