Saltar para o conteúdo

Coreboot

Origem: Wikipédia, a enciclopédia livre.
Coreboot
Desenvolvedor Ronald G. Minnich, Eric Biederman, Li-Ta (Ollie) Lo, Stefan Reinauer, e the coreboot community
Plataforma IA-32, x86-64, ARMv7,[1] ARMv8, MIPS, RISC-V, POWER8
Lançamento 1999 (24–25 anos)
Versão estável 4.13 (20 de novembro de 2020; há 4 anos[2][3])
Gênero(s) Firmware (BIOS)
Licença GPLv2
Página oficial http://www.coreboot.org/

O coreboot, anteriormente conhecido como LinuxBIOS,[4] é um projeto em software livre que visa substituir firmware proprietário (BIOS ou UEFI) encontrado na maioria dos computadores com um firmware leve projetado para executar apenas o número mínimo de tarefas necessárias para carregar e executar um moderno sistema operacional de 32 bits ou 64 bits. Desde coreboot inicializa o hardware direto, é portado para cada chipset e placa-mãe que ele suporta. Como resultado, coreboot está disponível apenas para um número limitado de plataformas de hardware e modelos de placas-mãe. Uma das variantes Coreboot é Libreboot.

O projeto coreboot começou no inverno de 1999 no Laboratório de Computação Avançada em Laboratório Nacional de Los Alamos (LANL),[5] com o objetivo de criar uma BIOS que iria inicializar rápido e tratar os erros de forma inteligente.[6] É licenciado sob os termos da GNU General Public License (GPL). Principais contribuintes incluem LANL, SiS, AMD, Coresystems e Linux Networx, Inc, bem como fornecedores de placas-mães MSI, Gigabyte e Tyan, que oferecem coreboot ao lado de sua BIOS padrão ou fornecer as especificações dos interfaces de hardware para algumas das suas placas-mães. Google parcialmente patrocinou o projeto coreboot.[7] CME Group, um grupo de bolsas de futuros, começou a apoiar o projeto coreboot em 2009.[8]

Coreboot foi aceito nos sete anos consecutivos (2007-2014) para o Google Summer of Code.[9][10] Além dos três primeiros modelos, todos os Chromebooks executam Coreboot.[11][12] O código do Das U-Boot foi assimilado para ativar o suporte para processadores baseados no conjunto de instruções ARM.[13]

As plataformas suportadas

[editar | editar código-fonte]

Arquiteturas de CPU suportadas pelo coreboot incluem IA-32, x86-64, ARM, ARM64, MIPS e RISC-V. Plataformas system-on-a-chip (SOC) suportadas incluem AMD Geode, começando com o processador Geode GX desenvolvido para o OLPC. Artec Group adicionou suporte Geode LX para a sua ThinCan modelo DBE61; que o código foi adotado pela AMD e melhorado para o OLPC depois que foi atualizado para a plataforma Geode LX, e é desenvolvido pela comunidade coreboot para suportar outras variantes Geode. Coreboot pode ser flashear em uma plataforma Geode usando Flashrom.

A partir desse desenvolvimento inicial em plataformas baseadas AMD Geode, suporte coreboot foi estendido para muitos processadores e chipsets AMD. A lista inclui processador Família 0Fh e 10h (core K8), e recentemente família 14h (núcleo Bobcat, Fusion APU). Suporte Coreboot também se estende aos chipsets AMD: RS690, RS7xx, SB600, e SB8xx.

AMD Generic Encapsulated Software Architecture (AGESA) - uma inicialização de protocolo pelo qual os dispositivos do sistema das placas-mâes AMD64 estão initializando - era código aberto no início de 2011, com o objetivo de fornecer a funcionalidade necessária para a inicialização do sistema coreboot em hardware AMD64.[14]

Dispositivos pré-carregados com Coreboot ou um de seus derivados incluem Chromebooks baseados em x86,[15] Libreboot X200 e T400 (rebatizado Thinkpad X200 e T400, respectivamente, disponível a partir da Minifree, anteriormente conhecido como Gluglug),[16][17] OLPC XO da iniciativa One Laptop per Child e ThinCan modelos DBE61, DBE62 e DBE63.

Coreboot normalmente carrega um kernel Linux, mas pode carregar qualquer outro executável ELF stand-alone, como iPXE, gPXE ou Etherboot que pode inicializar um kernel Linux através de uma rede, ou SeaBIOS[18] que podem carregar um kernel Linux, Microsoft Windows 2000 e posterior, e BSDs (anteriormente, o Windows 2000/XP e suporte a OpenBSD foi fornecida por ADLO[19][20]). Coreboot também pode carregar um kernel a partir de qualquer dispositivo compatível, como Myrinet, Quadrics, ou interconexões SCI de cluster. Iniciando outros kernels diretamente também é possível, como o kernel do Plan 9. Em vez de carregar um kernel diretamente, coreboot pode passar o controle para um carregador de inicialização dedicado, como uma versão compativel com coreboot o GNU GRUB 2.

Coreboot é escrito principalmente em C, com uma pequena quantidade de código em assembly. Escolhendo C como linguagem de programação principal por ser fácil auditar o código, o que resulta em maior segurança. O código fonte é liberado sob a licença GNU GPL versão 2.

Coreboot executa a quantidade mínima absoluta de inicialização de hardware, em seguida, passa o controle para o sistema operacional. Como resultado, não existe um código coreboot executando uma vez que o sistema operacional assumiu o controle; em particular, System Management Mode (SMM) pode ser suportado a partir do Driver SMMSTORE . Uma característica do coreboot é que a versão x86 é executado em modo 32-bits depois de executar apenas dez instruções[21] (quase todos as outras BIOS x86 executam exclusivamente em modo 16-bits). Isto é semelhante ao moderno firmware UEFI, que é usado em hardware PC mais recente.

Por si só, coreboot não fornece serviços de chamadas da BIOS. O SeaBIOS payload pode ser usado para fornecer chamadas de BIOS, e assim, permitir que coreboot carregue sistemas operacionais que necessitam desses serviços, como o Windows 2000/XP/Vista/7 e BSDs. No entanto, sistemas operacionais mais modernos acessam o hardware de uma outra maneira e usam apenas as chamadas da BIOS durante a inicialização e como um mecanismo de retorno.

Estágios do Coreboot

[editar | editar código-fonte]
  1. Estágio Bootblock: prepara para obter acesso ao Flash e procura o estágio ROM para usar
  2. Estágio Verificação: processo de Root of trust, provendo capacidades de Verified Boot
  3. Estágio ROM: memória e início do chipset init (um pouco como PEI em UEFI)
  4. Estágio Post: estagio de finalização da execução em Cache-as-Ram para uma DRAM, carregando o estágio de RAM
  5. Estágio RAM: enumeração de dispositivos e atribuição de recursos, criação de tabelas ACPI, manipulador SMM (um pouco como o estágio DXE no EFI)
  6. Payload: software independente que realiza a função de Boot do sistema operacional

Inicialização da plataforma (Silicon Init)

[editar | editar código-fonte]

Uma das partes mais polêmicas é a inicialização da plataforma. Em hardwares atuais, algumas documentações e dados não são completamente acessíveis ao público. Para isto, é necessário usar componentes proprietários fornecidos pela própria fabricante, sendo os Blobs Binários Proprietários.

O Intel FSP é um blob binário que fornece as informações necessárias para a inicialização de componentes da plataforma, sendo obrigatório em processadores da Intel recentes. Este contém uma abstração geral de acesso aos registradores e inicialização de componentes da Intel. O coreboot implementa um wrapper usando alguns pedaços de códigos do projeto EDK2.

Inicializando DRAM

[editar | editar código-fonte]

O hardware mais difícil que o coreboot inicializa é os controladores DRAM e DRAM. Em alguns casos, a documentação técnica sobre este assunto é NDA restrito ou indisponível. Inicialização RAM é particularmente difícil, porque antes da RAM estar inicializada não pode ser usado. Portanto, para inicializar controladores de DRAM e DRAM, o código de inicialização pode ter somente os registros de propósito geral da CPU ou Cache-as-RAM como armazenamento temporário.

romcc, um compilador C que utiliza registos em vez de RAM, facilita a tarefa. Usando o romcc, é relativamente fácil fazer acessos SMBus às ROMs SPD das DRAM DIMMs, que permite que a RAM seja usada.

Com os processadores x86 mais recentes, o cache do processador pode ser usado como RAM até que a DRAM seja inicializada. O cache do processador também tem de ser inicializado no modo Cache-as-RAM[22][23], mas isso requer menos instruções do que inicializar a DRAM. Além disso, a inicialização do modo Cache-as-RAM é específica para arquiteturas de CPU, portanto mais genérica que a inicialização DRAM, que é específica para cada chipset e placa mãe.

Na maioria das plataformas atuais é necessário o uso de um blob binário MRC, sendo este o responsável pelo treinamento e inicialização da RAM, também necessário para a inicialização de dispositivos PCIe, como GPUs discretas.

Algumas plataformas da Intel como Sandybridge e Ivybridge podem inicializar com o Coreboot Native RAM Init, que foi escrito utilizando técnicas de engenharia reversa.

Desenvolvendo e depurando o coreboot

[editar | editar código-fonte]
Hacking Coreboot em Denver 2008 summit.

Desde coreboot inicializar o hardware, ele deve ser portado para cada chipset e placa-mãe que suporta. Antes de inicializar a RAM, o coreboot inicializa a porta serial (somente cache de endereçamento e registros), para que ele possa enviar texto de depuração para um terminal conectado. Ele também pode enviar códigos de byte para a porta 0x80 que são exibidos em um display de dois dígitos hexadecimais de uma placa POST conectada.

Outro suporte para portar é o produto comercial "RD1 BIOS Savior" da IOSS,[24], que é uma combinação de dois dispositivos de memória de inicialização que se conecta ao soquete de memória de inicialização e tem um comutador manual para selecionar entre os dois dispositivos. O computador pode inicializar a partir de um dispositivo e, em seguida, o switch pode ser alternado para permitir que o computador reprogramar ou "flash" o segundo dispositivo. Uma alternativa mais cara é um programador EPROM/flash externo.

Existem também emuladores de CPU que substituem a CPU ou se conectam através de uma porta JTAG, sendo o Sage SmartProbe[25] um exemplo. Código pode ser construído em, ou baixado para, emuladores BIOS em vez de flashear o dispositivo BIOS.

SeaBIOS payload rodando em um Lenovo ThinkPad X60

O Coreboot pode carregar um payload, que pode ser escrita usando a biblioteca auxiliar do libpayload. Payloads existentes incluem o seguinte:

  • SeaBIOS, uma pequena implementação de x86 BIOS, escrito C principalmente em 16-bit usando GNU C compiler
  • EDK2, uma implementação da comunidade Tianocore livre e de código aberto da especificação UEFI[26]
  • OpenBIOS, uma implementação livre e de código aberto do Open Firmware. Abandonado atualmente
  • GNU GRUB, um bootloader universal do projeto GNU, apoiado pela Free Software Foudantion
  • FILO, um bootloader com suporte a boot USB
  • Etherboot, ele pode inicializar um sistema operacional através da rede
  • gPXE/iPXE, sucessor de Etherboot, funciona quando executado sob SeaBIOS
  • Depthcharge é usado pelo Google para Chrome OS[27]
  • U-Boot, um bootloader focado em dispositivos embarcados
  • LinuxBoot, uma alternativa a firmware UEFI, onde o Kernel Linux substitui o estágio de Drivers (DXE) juntamente com o estágio de Boot (BDS) utilizando o Kexec
  • Um ramo do Das U-Boot foi usado pelo Google para Chromium OS no passado[28]

O Libreboot foi estabelecido como uma distribuição de coreboot sem binários blobs proprietários.[29][30] Libreboot não é um fork direto do coreboot; Em vez disso, trata-se de um esforço paralelo que trabalha em estreita colaboração e re-bases de vez em quando no mais recente coreboot como o fornecedor upstream, com patches misturados upstream sempre que possível. Além de remover o software proprietário, o libreboot também tenta tornar o coreboot fácil de usar, automatizando os processos de construção e instalação.[31]

Endossado pela Free Software Foundation (FSF)[32], o projeto Libreboot possibilitou as modificações necessárias para as variantes completamente livres de alguns laptops ThinkPad, MacBook e Chromebook ARM.[33][34][35]


O Heads é uma distribuição coreboot focada em segurança e integridade do hardware utilizando técnicas modernas de Root Of Trust ao nível de firmware, tendo versões apenas para certos notebooks Thinkpads e Purism.

  1. «Coreboot ARM». coreboot. 15 de outubro de 2013. Consultado em 1 de fevereiro de 2014 
  2. «Downloads». coreboot. N.d. Consultado em 23 de outubro de 2016. Cópia arquivada em 23 de outubro de 2016 
  3. Roth, Martin (21 de outubro de 2016). «Announcing coreboot 4.5». Blog. coreboot. Consultado em 23 de outubro de 2016. Cópia arquivada em 23 de outubro de 2016 
  4. «[LinuxBIOS] Welcome to coreboot». 12 de janeiro de 2008 
  5. coreboot FAQ: Who is working on coreboot?
  6. Anton Borisov: The Open Source BIOS is Ten. An interview with the coreboot developers Arquivado em 16 de setembro de 2012, no Wayback Machine.. The H, 2009.
  7. Google Sponsors the LinuxBIOS project
  8. «CME Group Dives Into Coreboot and Other Linux Open Source Projects». Wall Street & Technology. Consultado em 23 de setembro de 2015. Arquivado do original em 12 de agosto de 2010 
  9. «Coreboot GSoC». coreboot.org. Consultado em 1 de fevereiro de 2014 
  10. «Previous GSoC Projects». coreboot.org. Consultado em 1 de fevereiro de 2014 
  11. Larabel, Michael (22 de abril de 2012). «Many FSF Priority Projects Still Not Progressing». Phoronix. Consultado em 29 de dezembro de 2014. The success out of Coreboot recently is Google providing Sandy/Ivy Bridge support for Coreboot. Google's planning to begin shipping new Intel "Chromebooks" that will use Coreboot. Google likes Coreboot for the faster start-up time, among other benefits. 
  12. «Chromebooks». coreboot. 16 de janeiro de 2014. Consultado em 17 de fevereiro de 2014 
  13. «GSoC2011(Week 1): Analysis of U-boot ARM boot code | coreboot developer blogs». Consultado em 12 de abril de 2014 
  14. «Technical details on AMD's coreboot source code release». AMD. 28 de fevereiro de 2011. Consultado em 1 de fevereiro de 2016. Arquivado do original em 25 de março de 2014 
  15. «Many FSF Priority Projects Still Not Progressing». Phoronix. 22 de abril de 2012. Consultado em 22 de setembro de 2015 
  16. «Minifree». Consultado em 24 de setembro de 2015 
  17. «The Gluglug». fsf.org. Consultado em 23 de setembro de 2015 
  18. «SeaBIOS»  (previously known as LegacyBIOS) is an open-source legacy BIOS implementation
  19. «coreboot Add-on Layer (ADLO)». Consultado em 3 de janeiro de 2017. Arquivado do original em 25 de novembro de 2010 
  20. «SEBOS, Security Enhanced Bootloader for Operating Systems, Phase 2». Consultado em 3 de janeiro de 2017. Arquivado do original em 19 de junho de 2007 , adding PC BIOS Services to coreboot via Bochs BIOS (Link noted to be defunct on 18 July 2008. See «SEBOS Phase 2». Consultado em 3 de janeiro de 2017. Arquivado do original em 19 de junho de 2007 )
  21. «coreboot v3 early startup code». Consultado em 3 de janeiro de 2017. Arquivado do original em 10 de julho de 2012 
  22. Yinghai Lu; Li-Ta Lo; Gregory R. Watson; Ronald G. Minnich (15 de janeiro de 2009). «CAR: Using Cache as RAM in Linux BIOS» (PDF). qmqm.pl. Consultado em 25 de fevereiro de 2014. Arquivado do original (PDF) em 3 de março de 2016 
  23. A Framework for Using Processor Cache as RAM (CAR)
  24. IOSS
  25. «Sage Engineering». Consultado em 3 de janeiro de 2017. Arquivado do original em 15 de março de 2011 
  26. «Google Pushes "Project PIANO" Into Coreboot - Phoronix». phoronix.com. Consultado em 23 de setembro de 2015 
  27. «Depthcharge: The ChromeOS bootloader». docs.google.com. Consultado em 26 de outubro de 2015 
  28. «Modify u-boot code to allow building coreboot payload. [chromiumos/third_party/u-boot-next : chromeos-v2011.03]». 24 de julho de 2011 
  29. «Libreboot». Free Software Foundation. Consultado em 31 de julho de 2014 
  30. «Libreboot». libreboot.org. Consultado em 31 de julho de 2014 
  31. «About the libreboot project». libreboot.org. Consultado em 25 de abril de 2015 
  32. «Campaign for Free BIOS — Free Software Foundation — working together for free software». fsf.org. Consultado em 23 de setembro de 2015 
  33. Gay, Joshua (9 de outubro de 2012). «Respects Your Freedom hardware product certification». Free Software Foundation. Consultado em 25 de fevereiro de 2015 
  34. «Hardware compatibility list». libreboot.org. Consultado em 25 de fevereiro de 2015 
  35. «Libreboot ported to Asus Chromebook C201 (free software bootloader)». liliputing.com. Consultado em 24 de outubro de 2015 

Leitura adicional

[editar | editar código-fonte]

Ligações externas

[editar | editar código-fonte]