Coreboot

Recursos
Página inicial

Coreboot é um firmware gratuito e de código aberto que pretende ser uma substituição rápida, segura e flexível para a UEFI. Ele suporta múltiplas cargas úteis, desde uma implementação de BIOS (SeaBIOS), a uma instalação do GRUB2, até um kernel linux completo. Este guia mostrará como instalar coreboot com uma carga útil SeaBIOS em dispositivos suportados, manuseio de ferramentas de espaço do usuário e o uso do flashrom.

Hardware suportado

Existem diferentes tipos de arquiteturas e hardware suportados. A tabela totalmente atualizada está disponível no link a seguir. Na tabela abaixo estão alguns dispositivos bem suportados que são lançados mais ou menos recentemente. Se um dispositivo mais antigo estiver sendo usado, pode ser possível remover todos os blobs binários proprietários. Para isso, use o guia libreboot.

>

Hardware Suportado Blob Free Native RAM Init Native Graphics Init Flashable via Hardware Flashable via Software Desoldagem necessária
Lenovo Thinkpad T530 Sim / Actualmente quebrado Não Sim Parcial Sim Parcial / não com BIOS OEM Sim
Lenovo Thinkpad T430s Sim / Actualmente quebrado Não Sim Parcial Sim Parcial / não com BIOS OEM Sim
Lenovo Thinkpad X230 Sim Não Sim Parcial Sim Parcial / não com BIOS OEM Não
Lenovo Thinkpad T420s Sim Não Sim Parcial Sim Parcial / não com BIOS OEM Não
Lenovo Thinkpad T420 Não / WIP Não / WIP Sim Parcial Sim Parcial / não com OEM BIOS Não
Lenovo Thinkpad T520 Sim Não Sim Parcial Sim Parcial / não com BIOS OEM Não
Lenovo Thinkpad X220 Sim Não Sim Parcial Sim Parcial / não com BIOS OEM Não
Lenovo Thinkpad X220 Sim Não Sim Parcial Sim Parcial / não com BIOS OEM Não
Lenovo Thinkpad T410 Não / WIP Não Sim Parcial Sim Parcial / não com BIOS OEM Não
Lenovo Thinkpad T510 Não / WIP Não / WIP Sim Parcial Sim Parcial / não com BIOS OEM Não
Lenovo Thinkpad X201 Sim / Actualmente quebrado Não Sim Parcial Sim Parcial / não com BIOS OEM Não
Apple Macbook Air 4,2 Sim Não Sim Não Sim Parcial / não com BIOS OEM Não

O básico

Em geral, o chip flash deve ser encontrado na placa do hardware selecionado. Isto é importante, já que o fornecedor normalmente bloqueia o chip flash via soft lockdown. Os guias para localizar o chip geralmente estarão no wiki coreboot. Este guia assume que o dispositivo contém um chip flash SPI, que requer um clipe para conectar até o flasher.

Flasher

Como um flasher, um Raspberry Pi pode ser facilmente usado. Qualquer modelo e revisão serve, mas fique avisado que os anteriores não têm memória RAM suficiente para compilar coreboot por si só. Se estiver usando um destes, certifique-se de copiar o dump do chip flash para um computador mais poderoso. Se o chip flash é baseado em SPI, certifique-se de obter um chip de teste Pomona SOIC-8 por £15. Mas também há muitos outros programadores. Certifique-se de obter alguns fios de depuração, também.

SPI flash

Existem diferentes tipos de chips SPI (lista). O pacote mais comum para estes chips é o SOIC-8 que pode ser flashado via testclip. Algumas vezes estes chips estão em um pacote WSON-8; neste caso o chip WSON-8 precisa ser desoldado, e revendido com um novo SOIC-8. Se você precisar de ajuda com a soldagem, pergunte aos hackers perto da sua localização. Os chips SPI são comuns em tamanhos a partir de 2MB – 16MB. Muitas vezes os vendedores soldam dois chips para economizar dinheiro.

flashrom

Bandeiras de USE para sys-apps/flashrom Utility para leitura, escrita, apagamento e verificação de chips flash ROM

atahpt Suporte do controlador ATA/RAID de ponto alto (HPT)
atapromise Suporte para Promise PDC2026x (FastTrak/Ultra)
atavia Suporte para controladores SATA VIA VT6421A
buspirate-spi Habilitar Bus Pirate SPI programador
ch341a-spi Activar programador WCH CH341A SPI
dediprog Suporte Dediprog SF100
developerbox-spi Activar o suporte de recuperação do Devloperbox SPI
digilent-spi Activar o suporte para a placa de desenvolvimento iCEblink40 Digilent
drkaiser Activar o Dr. Programador Kaiser
dummy Activar o rastreio dummy
ene-lpc Activar o controlador de teclado de interface ENE LPC
ft2232-spi Activar o programador ftdi, flashing através da interface USB FTDI/SPI
gfxnvidia Habilitar programador NVIDIA
internal Habilitar suporte interno/interno de placa
internal-dmi Habilitar decodificação interna DMI ao invés de usar sys-apps/dmidecode
it8212 Suporte para controladores ITE IT8212F ATA/RAID
jlink-spi Suporte para SEGGER J-Ligação e dispositivos compatíveis
linux-mtd Activar o suporte para dispositivos flash Linux mtd SPI
linux-spi Activar o suporte para a interface spidev do espaço do utilizador Linux
lspcon-i2c-spi Activar o suporte para Parade lspcon USB-Tradutor do protocolo C para HDMI
mec1308 Habilitar suporte para o controlador incorporado Microchip MEC1308
mstarddc-spi Suporte para ROMs flash SPI acessíveis através de DDC no MSTAR-ecrãs equipados
nic3com Activar programador de placas de rede 3Com
nicintel Suporte para placas de rede Intel
nicintel-eeprom Suporte para EEPROMs em placas de rede Intel Gigabit
nicintel-spi Suporte para SPIs em Intel NICs
nicnatsemi Suporte para DNIs Semicondutores Nacionais
nicrealtek Suporte para DNIs Realtek
ogp-spi Habilitar suporte para OGP (Open Graphics Project) SPI flashing
pickit2-spi SUpport para SPI flash ROMs acessíveis via Microchip PICkit2
pony-spi Habilitar suporte para SI-Prog like hardware by Lancos
raiden-debug-spi Habilitar placa de depuração ChromiumOS Servo DUT
rayer-spi Suporte de hardware RayeR SPIPGM
realtek-mst-i2c-spi Habilitar suporte para Realtek MultiStream Transport (MST)
satamv Habilitar programador para controladores SATA Marvell
satasii Habilitar programador para programadores SiI SATA
serprog Activar o programador Serial Flasher
static !!não defina isto durante o bootstrap!! Faz com que os binários sejam ligados estaticamente em vez de dinamicamente
stlinkv3-spi Activar o programador SPI usando STLINK-V3
tools Instalar a ferramenta ich_descriptor_tool, uma ferramenta para ler imagens SPI-flash do modo descritor para chipsets Intel
usbblaster-spi Habilitar suporte para dongles Altera USB-Blaster
wiki Habilitar informações wiki, como dispositivos suportados, etc.
Dados fornecidos pelo Banco de Dados do Pacote Gentoo – Última atualização: 2021-01-27 17:12 Mais informações sobre bandeiras USE

flashrom é mais comumente usado para despejar e escrever em chips flash. Isto deve ser instalado no flasher, ou na máquina à qual o flasher está conectado.

É útil instalar o flashrom no sistema que será flasheado, pois uma vez que o coreboot é flasheado inicialmente, ele pode ser reflassificado internamente, sem desmontagem ou uso de um flasher.

root #emerge --ask sys-apps/flashrom

Agora, a máquina precisa ser desmontada. Siga o manual, ou um guia online até que o chip flash esteja acessível, e depois prenda o clipe e ligue-o ao flasher.

Aviso
Certifique-se de que TODAS as fontes de alimentação estão desligadas da máquina, com excepção da bateria CMOS. É possível fritar as placas-mãe se elas estiverem conectadas enquanto estão sendo flasheadas a.

Após o chip flash estar conectado a um flasher, use o flashrom para despejar o conteúdo do chip flash.

root #flashrom -p linux_spi:dev=/dev/spidev0.0 -r flash.bin
root #>flashrom -p linux_spi:dev=/dev/spidev0.0 -r flash2.bin
root #diff flash.bin flash2.bin

É importante fazer múltiplas descargas, no caso de haver um erro de conexão. Uma vez obtido um despejo adequado, por enquanto é seguro desligar o pisca-pisca, se assim o desejar. Lembre-se, se rodando em um Raspberry Pi v1, ele não terá RAM suficiente para compilar, então neste ponto o dump deve ser transferido para uma máquina diferente. É possível utilizar o computador de onde o chip flash foi despejado, embora isso requeira a remontagem e outra desmontagem mais tarde.

Dumping and Compiling Tools

Agora, o repositório do coreboot git precisa ser clonado para um diretório de trabalho, pois ele contém ferramentas necessárias para continuar. Diretórios também devem ser criados para o fabricante e modelo específicos.

>

user $git clone --recursive https://review.coreboot.org/coreboot.git

>

>user $>cd coreboot

>

>user $mkdir -p 3rdparty/blobs/mainboard/<manufacturer>/<model>>

>

Substituir <manufacturer> e <model> com seu fabricante e modelo respectivamente (e.g. lenovo/x220).

O próximo passo é extrair regiões do flash dump. As regiões são semelhantes a partições, e são um chip flash contém um descritor flash que pode ser visto como uma tabela de partições para o flash SPI com algumas propriedades adicionais. Este descritor é lido por um programa chamado ifdtool, que será usado para obter as partições individuais.

Primeiro, o ifdtool deve ser compilado. Seu código fonte está contido sob coreboot’s, portanto cd no diretório onde o coreboot foi clonado.

user $ cd util/ifdtool
user $make

É uma boa idéia instalar globalmente, mas não é necessário.

raiz #make install

Então, cd de volta para onde quer que o flash.bin esteja.

user $ifdtool -x flash.bin

>

Esta irá imprimir uma tabela de partição, e extrair alguns blobs. Uma tabela de partição padrão pode se parecer com isto:

Região Descrição Região inicial Região final
0 Descritor de flash 0x00000000 0x00000fff
1 BIOS (Firmware) 0x00500000 0x00bfffff
2 ME 0x00003000 0x004fffff
3 GbE 0x00001000 0x00002fff
4 Dados da plataforma não usado não usado

Intel ME e Gigabit Ethernet Configuration Data

Note como a tabela acima contém ME e GbE. Estes são blobs binários que inicializam partes do computador (neste caso, Intel Management Engine e Gigabit Ethernet). Em dispositivos mais antigos, estes podem ser removidos com segurança com libreboot, mas em Sandy Bridge e mais recentes, eles são necessários para que o computador funcione corretamente. Uma vez que o Intel ME é necessário nestas placas, ele deve ser extraído. No entanto, o coreboot pode reduzir drasticamente o seu tamanho, removendo a sua rede e acesso aos recursos do sistema. Isto é recomendado, pois não só melhora a segurança, como também deixa mais espaço no chip flash para outras cargas úteis. Os dados de configuração Gigabit Ethernet são específicos para cada máquina, e como tal, também devem ser extraídos do chip flash.

Neste ponto, o diretório de trabalho deve conter quatro novos arquivos, que seguem o formato flashregion_*.bin. Estes devem ser mapeados para a tabela que foi impressa. Como mencionado anteriormente, o descritor, Intel ME e os blobs GbE são necessários. Renomeie-os para descriptor.bin, me.bin e gbe.bin respectivamente, e copie-os para coreboot/3rdparty/blobs/mainboard/<manufacturer>/<model>/; o diretório que foi criado anteriormente.

Configuring and Compiling Coreboot

Now, coreboot deve ser configurado para a máquina específica. É melhor verificar a página wiki do coreboot para o dispositivo em questão, no caso de haver algum requisito específico. Como tal, esta página tentará apenas detalhar as configurações que devem ser configuradas para a maioria das instalações. Isto não pode ser garantido, e algumas configurações podem causar conflitos com a máquina.

Primeiro, você deve entrar com a configuração. Isto é feito de forma similar à configuração de um kernel.

user $make nconfig

Alternativamente, pode-se usar o menuconfig, ou mesmo editar o arquivo de configuração manualmente (uma vez gerado pelo nconfig/menuconfig).

Configuração Geral

Abrir o seguinte:

  • Utilizar CMOS para valores de configuração
  • Comprimir ramstage com LZMA
  • Incluir o coreboot .config na imagem ROM
  • Criar uma tabela de timestamps coletados durante o boot
  • Build the ramstage to be relocatable in 32-bit address space.

Para um dispositivo Sandy Bridge ou posterior:

  • Permita o uso do repositório somente de binários

E se você compilou previamente o coreboot, você pode reduzir ainda mais o tempo de compilação habilitando:

  • Atualize a imagem existente do coreboot.rom

Mainboard

Aqui, o fornecedor e o modelo devem ser selecionados. Certifique-se de que o modelo exato está digitado, se derivados estão disponíveis (por exemplo X220/X220t). O tamanho do chip ROM também deve ser selecionado. Isto deve ter sido emitido pelo flashrom, mas se não puder ser determinado verificando o tamanho dos arquivos do flash.bin.

Chipset

Este menu contém opções específicas do chipset, e também as localizações para os blobs binários extraídos anteriormente. uma vez que isto é em grande parte específico da máquina, existem apenas certas opções que devem ser ativadas em toda a linha. Eu recomendo habilitar:

  • Ativar VMX para virtualização
  • Definir bit de bloqueio após configurar VMX
  • Bep em erro fatal
  • Leds de flash em erro fatal

Estas permitirão uma depuração mais fácil se você tiver um flash ruim. Eles podem ser desabilitados uma vez que uma configuração de trabalho conhecida seja criada.

Próximo, caminhos devem ser fornecidos em Intel Firmware. Habilite estas opções:

  • Adicionar arquivo Intel descriptor.bin
  • Adicionar firmware Intel ME/TXE
  • Descrever o firmware Intel ME/TXE
  • Adicionar firmware ethernet gigabit

Opções para os caminhos devem agora aparecer. Eles devem corresponder aos nomes usados anteriormente, mas se não corresponderem, corrigi-los de forma a que apareçam.

Dispositivos

Esta área diz respeito em grande parte aos gráficos, especialmente no contexto dos laptops. Pessoalmente, eu tenho a Inicialização de Gráficos definida para ‘Usar init gráficos nativos’, e o Modo Display/Framebuffer definido para ‘Linear “alta resolução” framebuffer’. O resto destas opções já deve estar definido para a máquina. Se o dispositivo específico requer uma imagem VGA BIOS, siga o wiki coreboot.

Controladores genéricos

Ativei frequentemente:

  • PS/2 teclado init

Se o dispositivo tiver uma placa Intel PCIe WiFi, active a opção

  • Suporte adaptadores Intel PCI-e WiFi

Segurança

Deixar frequentemente isto em paz, uma vez que actualmente só contém opções de Boot Verificado, mas se for necessário suporte para isto, active-o.

Console

Esta seção contém opções sobre consoles de depuração. Pode ser útil activar certas opções, especialmente se estiverem a ocorrer problemas. Activei:

  • Squelch AP CPUs desde o console inicial.
  • Enviar saída de console para um buffer CBMEM
  • Mostrar códigos POST no console de depuração

System Tables

Enable Generate SMBIOS tables, a única opção aqui.

Payloads

Abrir tabelas SMBIOS, a única opção aqui. Esta página irá detalhar como configurar o SeaBIOS, pois ele tem a maior compatibilidade com sistemas operacionais, mas também é possível usar o GRUB2 para inicialização mais rápida, ou mesmo colocar um kernel no chip flash (se houver espaço suficiente).

Selecione o seguinte para uma configuração apropriada do SeaBIOS:

  • Adicionar uma carga útil > SeaBIOS
  • Versão do SeaBIOS > master
  • Init de hardware durante a execução da opção ROM
  • Utilizar compressão LZMA para cargas úteis

A pessoa também pode querer habilitar algumas cargas úteis secundárias. Estas podem ser usadas para depuração e mudança de opções. Uma opção recomendada é o nvramcui, que atua de forma similar a um menu de opções padrão da BIOS.

Debugging

Estas opções são em grande parte para desenvolvimento. Usuários regulares não precisam habilitar nada neste submenu.

Compilação

Agora que a configuração seja feita, o coreboot deve ser compilado. Primeiro, o cross-compiler deve ser construído:

user $make crossgcc-i386 CPUS=${nproc}

Requer que dev-lang/gnat-gpl seja instalado, caso contrário muitas funções não funcionarão corretamente.

Após isto ser feito, compilar IASL:

user $make iasl

>

E finalmente, compilar coreboot

user $make

Flashing coreboot.rom

>

Isto deve produzir um arquivo no diretório build/ chamado coreboot.rom. Esta é a imagem final que precisa ser flasheada. Copie isto para o flasher, se ainda não estiver nele, desmonte o dispositivo alvo e anexe o flasher ao chip flash.

No flasher, use flashrom para flash:

root #flashrom -p linux_spi:dev=/dev/spidev0.0 -w coreboot.rom
root #flashrom -p linux_spi:dev=/dev/spidev0.0 -v coreboot.rom

O segundo comando deve retornar VERIFICADO. Se assim for, o coreboot foi flasheado com sucesso para o dispositivo.

Flashing via internal

Once coreboot foi flasheado inicialmente, pode mais tarde ser flasheado internamente, sem necessidade de um dispositivo de flasheo externo. Para isso, uma vez compilado um novo coreboot.rom, basta fazer o seguinte:

root #flashrom -p internal:laptop=force_I_want_a_brick -w coreboot.rom
Aviso
Embora tenha sido testado em vários computadores portáteis, pode não funcionar no dispositivo a ser utilizado. Certifique-se de verificar se outros tiveram sucesso ou falhas com o flash interno para o modelo específico.

Resolução de problemas

Coreboot não está inicializando (Broken build)

Se o coreboot não está inicializando, geralmente significa que ou não está configurado corretamente, ou está faltando uma carga útil. Certifique-se de que um payload adequado foi selecionado e compilado corretamente, e configurado corretamente.

Também é possível que o coreboot esteja funcionando corretamente, mas o componente gráfico não está. Isto pode ser causado pelo uso do init nativo do gfx. Tente despejar uma BIOS VGA e usar isso em seu lugar. Também pode ser o contrário; tente mudar de uma BIOS VGA para um init gfx nativo. Como recurso final, tente usar o modo de texto Legacy VGA para o modo framebuffer em Devices/Display.

Nada mais está inicializando (aka SPI chip bricked)

Isso geralmente é causado por deixar a máquina ligada enquanto se descarrega ou pisca com um flasher externo. Se a máquina não ligar (Sem luzes, ventiladores ou display ligado no boot), isso pode significar que a máquina está com o tijolo. Pode ser possível reparar comprando um novo chip flash (certifique-se de que é compatível – tente usar o mesmo fabricante e modelo para obter melhores resultados) e piscando este com a BIOS original ou com a ROM coreboot. Isto requer frequentemente uma soldadura muito delicada, e não é para a finta do coração. Isso pode significar que uma nova máquina deve ser comprada, ou pelo menos uma nova placa-mãe.

Nota
Veja sempre se a causa não é um coreboot mal-configurado!

Deixe uma resposta

O seu endereço de email não será publicado.