coreboot - coreboot

coreboot
Imagem de uma lebre correndo em preto e branco acima do texto "coreboot" em fonte sans-serif minúscula
Autor (es) original (is) Ronald G. Minnich, Eric Biederman, Li-Ta (Ollie) Lo, Stefan Reinauer e a comunidade coreboot
lançamento inicial 1999 ; 22 anos atras ( 1999 )
Versão estável
4,14 / 10 de maio de 2021 ; 5 meses atrás ( 2021-05-10 )
Repositório
Escrito em Principalmente C , e cerca de 1% na montagem . Opcionalmente Ada
Plataforma IA-32 , x86-64 , ARMv7 , ARMv8, MIPS , RISC-V , POWER8
Modelo Firmware
Licença GPLv2
Local na rede Internet www .coreboot .org Edite isso no Wikidata

O projeto de software coreboot , anteriormente conhecido como LinuxBIOS , tem como objetivo substituir o firmware proprietário ( BIOS ou UEFI ) encontrado na maioria dos computadores por um firmware leve projetado para executar apenas o número mínimo de tarefas necessárias para carregar e executar um computador moderno de 32 ou 64 bits sistema operacional de bits .

Uma vez que o coreboot inicializa o hardware vazio, ele deve ser transferido para cada chipset e placa - mãe que suporte. Como resultado, o coreboot está disponível apenas para um número limitado de plataformas de hardware e modelos de placa-mãe.

Uma das variantes do coreboot é o Libreboot , uma distribuição de software totalmente livre de blobs proprietários , voltada para usuários finais.

História

O projeto coreboot começou no inverno de 1999 no Laboratório de Computação Avançada do Laboratório Nacional de Los Alamos (LANL), com o objetivo de criar um BIOS que iniciasse rapidamente e tratasse os erros de forma inteligente. Ele é licenciado sob os termos da GNU General Public License (GPL). Os principais contribuidores incluem LANL , SiS , AMD , Coresystems e Linux Networx, Inc, bem como fornecedores de placas-mãe MSI , Gigabyte e Tyan , que oferecem coreboot junto com seu BIOS padrão ou fornecem especificações das interfaces de hardware para algumas de suas placas-mãe. O Google patrocina parcialmente o projeto coreboot. O CME Group , um cluster de bolsas de futuros , começou a apoiar o projeto coreboot em 2009.

Coreboot foi aceito em sete anos consecutivos (2007–2014) para o Google Summer of Code . Com exceção dos três primeiros modelos, todos os Chromebooks executam coreboot. O código do Das U-Boot foi assimilado para habilitar o suporte para processadores baseados no conjunto de instruções ARM .

Em junho de 2019, a Coreboot começou a usar o software Ghidra da NSA para seus esforços de engenharia reversa em problemas específicos de firmware após o lançamento de código aberto do pacote de software.

Plataformas suportadas

As arquiteturas de CPU suportadas pelo coreboot incluem IA-32 , x86-64 , ARM , ARM64 , MIPS e RISC-V . As plataformas de sistema em um chip (SOC) com suporte incluem AMD Geode , começando com o processador Geode GX desenvolvido para o OLPC . Artec Group adicionou suporte Geode LX para seu modelo ThinCan DBE61 ; esse 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 do Geode. Coreboot pode ser instalado em uma plataforma Geode usando Flashrom .

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

AMD Generic Encapsulated Software Architecture ( AGESA ) ‍ — ‌um protocolo de bootstrap pelo qual os dispositivos do sistema em placas-mãe AMD64 são inicializados‍ — ‌foi aberto o código no início de 2011, com o objetivo de fornecer a funcionalidade necessária para inicialização do sistema coreboot no hardware AMD64. No entanto, esses lançamentos nunca se tornaram a base para o desenvolvimento futuro da AMD e foram posteriormente interrompidos.

Dispositivos que podem ser pré-carregados com coreboot ou um de seus derivados incluem alguns Chromebooks baseados em x86 , o Libreboot X200 e T400 (renomeados ThinkPad X200 e T400, respectivamente, disponível na Minifree, anteriormente conhecido como Gluglug), OLPC XO da One Laptop por Iniciativa infantil , modelos ThinCan DBE61, DBE62 e DBE63 e hardware de servidor / roteador fanless fabricado pela PC Engines . Todos os laptops Librem vêm com coreboot.

Alguns PCs System76 usam firmware coreboot TianoCore, incluindo firmware de controlador integrado de código aberto .

Projeto

Coreboot normalmente carrega um kernel Linux , mas pode carregar qualquer outro executável ELF autônomo , como iPXE , gPXE ou Etherboot que pode inicializar um kernel Linux em uma rede , ou SeaBIOS que pode carregar um kernel Linux, Microsoft Windows 2000 e posterior e BSDs (anteriormente, o suporte para Windows 2000 / XP e OpenBSD era fornecido pela ADLO). Coreboot também pode carregar um kernel de qualquer dispositivo compatível, como Myrinet, Quadrics ou interconexões de cluster SCI . Também é possível inicializar outros kernels diretamente, como um kernel do Plan 9 . Em vez de carregar um kernel diretamente, o coreboot pode passar o controle para um carregador de boot dedicado, como uma versão compatível com coreboot do GNU GRUB 2.

Coreboot é escrito principalmente em C , com uma pequena quantidade de código assembly . A escolha de C como a linguagem de programação primária permite auditorias de código mais fáceis quando comparada ao BIOS de PC contemporâneo que geralmente foi escrito em assembly, o que resulta em segurança aprimorada. Há suporte de compilação e tempo de execução para escrever partes do coreboot em Ada para aumentar ainda mais a barreira de segurança, mas atualmente é usado apenas esporadicamente. O código-fonte é lançado sob a licença GNU GPL versão 2 .

Coreboot executa a quantidade mínima absoluta de inicialização de hardware e, em seguida, passa o controle para o sistema operacional . Como resultado, não há código de coreboot em execução depois que o sistema operacional assume o controle. Um recurso do coreboot é que a versão x86 é executada no modo de 32 bits depois de executar apenas dez instruções (quase todos os outros BIOS x86 são executados exclusivamente no modo de 16 bits ). Isso é semelhante ao firmware UEFI moderno , que é usado em hardware de PC mais recente.

Por si só, o coreboot não fornece serviços de chamada de BIOS . A carga útil SeaBIOS pode ser usada para fornecer chamadas de BIOS e, assim, permitir que o coreboot carregue sistemas operacionais que requerem esses serviços, como Windows 2000 / XP / Vista / 7 e BSDs. No entanto, a maioria dos sistemas operacionais modernos acessa o hardware de outra maneira e usa chamadas do BIOS apenas durante a inicialização e como um mecanismo de fallback.

Estágios Coreboot

  1. Estágio de bootblock: Prepare-se para obter acesso ao Flash e procure o estágio de ROM a ser usado
  2. Estágio da ROM: memória e início do chipset inicial (um pouco como PEI em UEFI)
  3. Estágio de RAM: CPU, chipset, placa-mãe e init periférico, atribuição de recursos PCI, criação de tabela ACPI, manipulador SMM (um pouco como estágio DXE em UEFI)
  4. Carga útil.

Inicializando DRAM

O hardware mais difícil que o coreboot inicializa são os controladores DRAM e DRAM . Em alguns casos, a documentação técnica sobre este assunto é restrita ao NDA ou não está disponível. A inicialização da RAM é particularmente difícil porque antes que a RAM seja inicializada, ela não pode ser usada. Portanto, para inicializar controladores DRAM e DRAM, o código de inicialização pode ter apenas os registros de uso geral da CPU ou Cache-as-RAM como armazenamento temporário.

romcc , um compilador C que usa registradores em vez de RAM, facilita a tarefa. Usando romcc, é relativamente fácil fazer acessos SMBus aos SPD ROMs dos DRAM DIMMs , que permitem o uso de RAM.

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

Para a maioria das plataformas x86 modernas, componentes binários de código fechado fornecidos pelo fornecedor são usados ​​para configuração de DRAM. Para sistemas Intel, o FSP-M é necessário, enquanto a AMD não tem suporte atual. O binário AGESA é usado atualmente para firmware UEFI proprietário em sistemas AMD e espera-se que este modelo seja transportado para qualquer suporte de coreboot futuro relacionado à AMD.

Desenvolvendo e depurando coreboot

Image
Hackeando o coreboot na cúpula de Denver 2008.

Uma vez que o coreboot deve inicializar o hardware vazio, ele deve ser transferido para cada chipset e placa - mãe que suporte. Antes de inicializar a RAM , o coreboot inicializa a porta serial (endereçando cache e registradores apenas), para que 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 .

Outra ajuda de portabilidade foi o produto comercial "RD1 BIOS Savior" de www.ioss.com.tw, ​​(não deve ser confundido com US Interagency OPSEC Support Staff em www.iad.gov/ioss/), que era uma combinação de duas memórias de inicialização dispositivos que se conectam ao soquete de memória de inicialização e tem uma chave manual para selecionar entre os dois dispositivos. O computador pode inicializar a partir de um dispositivo e, em seguida, a chave pode ser alternada para permitir que o computador reprograme ou "atualize" o segundo dispositivo. Uma alternativa mais cara é um programador de flash EEPROM / NOR externo .

Existem também emuladores de CPU que substituem a CPU ou se conectam através de uma porta JTAG , com o Sage SmartProbe sendo um exemplo. O código pode ser criado ou baixado para emuladores BIOS, em vez de atualizar o dispositivo BIOS.

Cargas

Image
Carga útil SeaBIOS em execução em um Lenovo ThinkPad X60

Coreboot pode carregar uma carga útil, que pode ser escrita usando a biblioteca auxiliar libpayload . As cargas úteis existentes incluem o seguinte:

  • SeaBIOS , uma pequena implementação do BIOS x86, escrita principalmente em C de 16 bits usando o compilador GNU C
  • TianoCore , uma implementação gratuita e de código aberto da UEFI
  • OpenBIOS , uma implementação gratuita e de código aberto do Open Firmware
  • GNU GRUB , um bootloader
  • FILO, um bootloader semelhante ao GRUB com suporte para inicialização USB
  • Etherboot , ele pode inicializar um sistema operacional pela rede
  • gPXE / iPXE , o sucessor do Etherboot, funciona quando executado no SeaBIOS ou TianoCore
  • Depthcharge é usado pelo Google para Chrome OS
  • Uma ramificação do Das U-Boot foi usada pelo Google para o Chromium OS no passado

European Coreboot Conference

Uma reunião física é a European Coreboot Conference, que foi organizada em outubro de 2017 e durou 3 dias.

História da conferência

Evento e ano Encontro Cidade sede Local Recursos Temas
ECC2017 26,10. - 29,10 Bochum , Alemanha Centro de convenções RUB https://ecc2017.com

Variantes

Coreboot tem uma série de variantes de sua base de código original, cada uma com objetivos ligeiramente diferentes:

  • librecore - Uma variante com mais foco na liberdade , computadores com conjunto de instruções não x86 e estruturas de desenvolvimento de firmware.
  • Libreboot - Uma variante com foco principal para remover todos os blobs binários.

Libreboot foi estabelecido como uma distribuição de coreboot sem blobs binários proprietários . Libreboot não é um fork direto do coreboot; em vez disso, é um esforço paralelo que trabalha de perto e se refaz de vez em quando no coreboot mais recente como o fornecedor de upstream, com patches mesclados de 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.

O projeto Libreboot possibilitou as modificações necessárias para variantes completamente libre de alguns laptops ThinkPad , MacBook e ARM Chromebook .

Veja também

Referências

Leitura adicional

links externos