Coreboot

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Coreboot
Coreboot full.svg
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 (17–18 anos)
Versão estável 4.5 (18 de outubro de 2016; há 11 meses[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.

História[editar | editar código-fonte]

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. Suportado system-on-a-chip (SOC) plataformas 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.

Projeto[editar | editar código-fonte]

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) não está ativado. 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 ROM: memória e início do chipset init (um pouco como PEI em EFI)
  3. 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)
  4. Payload.

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.

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.

Payloads[editar | editar código-fonte]

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:

Variantes[editar | editar código-fonte]

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]

Ver também[editar | editar código-fonte]

Portal A Wikipédia possui o portal:

Referências[editar | editar código-fonte]

  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. 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 
  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)
  20. «SEBOS, Security Enhanced Bootloader for Operating Systems, Phase 2»  Arquivado em 19 de junho de 2007 no Wayback Machine., adding PC BIOS Services to coreboot via Bochs BIOS (Link noted to be defunct on 18 July 2008. See SEBOS Phase 2 no Wayback Machine (arquivado 19 de junho de 2007))
  21. coreboot v3 early startup code
  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 
  23. A Framework for Using Processor Cache as RAM (CAR)
  24. IOSS
  25. Sage Engineering
  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]