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
- O básico
- Flasher
- SPI flash
- flashrom
- Bandeiras de USE para sys-apps/flashrom Utility para leitura, escrita, apagamento e verificação de chips flash ROM
- Dumping and Compiling Tools
- Intel ME e Gigabit Ethernet Configuration Data
- Configuring and Compiling Coreboot
- Configuração Geral
- Mainboard
- Chipset
- Dispositivos
- Controladores genéricos
- Segurança
- Console
- System Tables
- Payloads
- Debugging
- Compilação
- Flashing coreboot.rom
- Flashing via internal
- Resolução de problemas
- Coreboot não está inicializando (Broken build)
- Nada mais está inicializando (aka SPI chip bricked)
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. |
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.
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
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.
Veja sempre se a causa não é um coreboot mal-configurado!