Coreboot es un firmware libre y de código abierto que pretende ser un reemplazo rápido, seguro y flexible de UEFI. Soporta múltiples payloads, que van desde una implementación de la BIOS (SeaBIOS), a una instalación de GRUB2, hasta un kernel linux completo.Esta guía mostrará cómo instalar coreboot con un payload SeaBIOS en los dispositivos soportados, el manejo de las herramientas del espacio de usuario y el uso de flashrom.
- Hardware soportado
- Los fundamentos
- Flasher
- SPI flash
- flashrom
- Utiliza banderas para sys-apps/flashrom Utilidad para leer, escribir, borrar y verificar los chips flash ROM
- Herramientas de volcado y compilación
- Datos de configuración de Intel ME y Gigabit Ethernet
- Configuración y compilación de Coreboot
- Configuración general
- Placa base
- Chipset
- Dispositivos
- Controladores genéricos
- Security
- Consola
- Tablas del sistema
- Cargas útiles
- Debugging
- Compilación
- Flashea coreboot.rom
- Flasheo vía interna
- Solución de problemas
- Coreboot no está arrancando (Broken build)
- Ya no arranca nada (aka SPI chip bricked)
Hardware soportado
Hay diferentes tipos de arquitecturas y hardware soportado. La tabla totalmente actualizada está disponible en el siguiente enlace. En la tabla de abajo hay algunos dispositivos bien soportados que son más o menos recientes. Si se utiliza un dispositivo más antiguo, puede ser posible eliminar todos los blobs binarios propietarios. Para ello, utilice la guía de libreboot.
Hardware | Soportado | Blob Free | Init de RAM nativa | Init de gráficos nativos | Flashable por hardware | Flashable por software | Se necesita desoldar |
---|---|---|---|---|---|---|---|
Lenovo Thinkpad T530 | Sí / Actualmente roto | No | Sí | Parcial | Sí | Parcial / no con BIOS OEM | Sí |
Lenovo Thinkpad T430s | Sí / Actualmente roto | No | Sí | Parcial | Sí | Parcial / no con BIOS OEM | Sí |
Lenovo Thinkpad X230 | Sí | No | Sí | Parcial | Sí | Parcial / no con BIOS OEM | No |
Lenovo Thinkpad T420s | Sí | No | Sí | Parcial | Sí | Parcial / no con BIOS OEM | No |
Lenovo Thinkpad T420 | No / WIP | No | Sí | Parcial | Sí | Parcial / no con OEM BIOS | No |
Lenovo Thinkpad T520 | Sí | No | Sí | Parcial | Sí | Parcial / no con BIOS OEM | No |
Lenovo Thinkpad X220 | Sí | No | Sí | Parcial | Sí | Parcial / no con BIOS OEM | No |
Lenovo Thinkpad X220 | Sí | No | Sí | Parcial | Sí | Parcial / no con BIOS OEM | No |
Lenovo Thinkpad T410 | No / WIP | No | Sí | Parcial | Sí | Parcial / no con BIOS OEM | No |
Lenovo Thinkpad T510 | No / WIP | No | Sí | Parcial | Sí | Parcial / no con BIOS OEM | No |
Lenovo Thinkpad X201 | Sí / Actualmente roto | No | Sí | Parcial | Sí | Parcial / no con BIOS OEM | No |
Apple Macbook Air 4,2 | Sí | No | Sí | No | Sí | Parcialmente / no con BIOS OEM | No |
Los fundamentos
En general, el chip flash debe encontrarse en la placa del hardware seleccionado. Esto es importante, ya que el proveedor suele bloquear el chip flash mediante un bloqueo suave. Las guías para localizar el chip generalmente estarán en el wiki de coreboot. Esta guía asume que el dispositivo contiene un chip flash SPI, que requiere un clip para conectarse al flasher.
Flasher
Como flasher, se puede utilizar fácilmente una Raspberry Pi. Cualquier modelo y revisión servirá, pero hay que advertir que las anteriores no tienen suficiente RAM para compilar coreboot por sí mismas. Si usas una de estas, asegúrate de copiar el volcado del chip flash en un ordenador más potente. Si el chip flash está basado en SPI, asegúrate de conseguir un testclip Pomona SOIC-8 por 15 libras. Pero también hay muchos otros programadores. Asegúrese de conseguir algunos cables de depuración, también.
SPI flash
Hay diferentes tipos de chips SPI (lista). El paquete más común para estos chips es SOIC-8 que puede ser flasheado a través de testclip. A veces estos chips están en un paquete WSON-8; en cuyo caso el chip WSON-8 necesita ser desoldado, y resuelto con un nuevo SOIC-8. Si necesitas ayuda con la soldadura pregunta en los hackerspaces cercanos a tu ubicación. Los chips SPI son comunes en tamaños de 2MB – 16MB. A menudo los vendedores sueldan dos chips para ahorrar dinero.
flashrom
Utiliza banderas para sys-apps/flashrom Utilidad para leer, escribir, borrar y verificar los chips flash ROM
atahpt |
Soporte del controlador ATA/RAID Highpoint (HPT) |
atapromise |
Soporte para Promise PDC2026x (FastTrak/Ultra) |
atavia |
Soporte para controladores VIA VT6421A SATA |
buspirate-spi |
Habilitar Bus Pirate SPI programador |
ch341a-spi |
Habilitar programador SPI WCH CH341A |
dediprog |
Soporte Dediprog SF100 |
developerbox-spi |
Habilitar el soporte de recuperación SPI de Devloperbox |
digilent-spi |
Habilitar el soporte de la placa de desarrollo Digilent iCEblink40 |
drkaiser |
Habilitar el programador Dr. Kaiser programador |
dummy |
Habilitar trazado ficticio |
ene-lpc |
Habilitar controlador de teclado interfaz ENE LPC |
ft2232-spi |
Habilitar programador ftdi, parpadeo a través de la interfaz FTDI/SPI USB |
gfxnvidia |
Habilitar programador NVIDIA |
internal |
Habilitar soporte interno/en placa |
internal-dmi |
Habilitar decodificación DMI interna en lugar de utilizar sys-apps/dmidecode |
it8212 |
Soporte para controladores ITE IT8212F ATA/RAID |
jlink-spi |
Soporte para SEGGER J-Link y dispositivos compatibles |
linux-mtd |
Habilitar el soporte para dispositivos flash SPI mtd de Linux |
linux-spi |
Habilitar el soporte para la interfaz spidev del espacio de usuario de Linux |
lspcon-i2c-spi |
Habilitar el soporte para lspcon USB-C a HDMI |
mec1308 |
Habilitar el soporte para el controlador embebido Microchip MEC1308 |
mstarddc-spi |
Soporte para flash ROMs SPI accesibles a través de DDC en pantallas equipadas con MSTAR-pantallas equipadas |
nic3com |
Habilitación del programador de NIC de 3Com |
nicintel |
Soporte para NIC de Intel |
nicintel-eeprom |
Soporte para EEPROMs en tarjetas de red Intel Gigabit |
nicintel-spi |
Soporte para SPI en NICs Intel |
nicnatsemi |
Soporte para NICs de National Semiconductor |
nicrealtek |
Soporte para NICs de Realtek |
ogp-spi |
Habilitar soporte para OGP (Open Graphics Project) SPI flashing |
pickit2-spi |
Soporte para flash ROMs SPI accesibles a través de Microchip PICkit2 |
pony-spi |
Habilitar soporte para SI-Prog like hardware by Lancos |
raiden-debug-spi |
Habilitar placa de depuración ChromiumOS Servo DUT |
rayer-spi |
Soporte de hardware RayeR SPIPGM |
realtek-mst-i2c-spi |
Habilitar soporte para Realtek MultiStream Transport (MST) |
satamv |
Habilitar programador para controladores SATA de Marvell |
satasii |
Habilitar programador ¡para controladores SATA SiI |
serprog |
Habilitar programador Serial Flasher |
static |
!no lo configure durante el arranque. Hace que los binarios sean enlazados estáticamente en lugar de dinámicamente |
stlinkv3-spi |
Habilitar el programador SPI usando STLINK-V3 |
tools |
Instalar ich_descriptor_tool, una herramienta para leer imágenes SPI-flash en modo descriptor para los conjuntos de chips de Intel |
usbblaster-spi |
Habilitar el soporte para los dongles USB-Blaster de Altera |
wiki |
Habilitar la información de la wiki, como los dispositivos soportados, etc. |
flashrom es la más utilizada para volcar y escribir en los chips flash. Esto debe ser instalado en el flasher, o en la máquina a la que el flasher está conectado.
Es útil instalar flashrom en el sistema al que se va a flashear, ya que una vez que coreboot es flasheado inicialmente, se puede reflashear internamente, sin desmontar o usar un flasher.
root #
emerge --ask sys-apps/flashrom
Ahora, la máquina necesita ser desmontada. Siga el manual, o una guía en línea hasta que el chip de flash es accesible, y luego adjuntar el clip y el cable a la intermitente.
Asegúrese de que TODAS las fuentes de energía están desconectados de la máquina, aparte de la batería CMOS. Es posible freír las placas base si están conectadas mientras se está flasheando.
Una vez que el chip de flash está conectado a un flasher, utilice flashrom para volcar el contenido del chip de 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
Es importante hacer varios volcados, por si hay un error de conexión. Una vez que se obtiene un volcado adecuado, es seguro desconectar el flasher por ahora si así se desea. Recuerde, si se ejecuta en una Raspberry Pi v1, no tendrá suficiente RAM para compilar, por lo que en este punto el volcado debe ser transferido a una máquina diferente. Es posible utilizar el equipo desde el que se volcó el chip flash, aunque esto requerirá volver a montarlo y otro desmontaje más tarde.
Herramientas de volcado y compilación
Ahora, es necesario clonar el repositorio git de coreboot a un directorio de trabajo, ya que contiene las herramientas necesarias para continuar. También hay que crear directorios para el fabricante y el modelo específicos.
user $
git clone --recursive https://review.coreboot.org/coreboot.git
user $
cd coreboot
user $
mkdir -p 3rdparty/blobs/mainboard/<manufacturer>/<model>
Sustituir <manufacturer> y <model> por su fabricante y modelo respectivamente (por ejemplog. lenovo/x220).
El siguiente paso es extraer regiones del volcado de la flash. Las regiones son similares a las particiones, y son un chip flash contiene un descriptor flash que puede ser visto como una tabla de particiones para la flash SPI con algunas propiedades adicionales. Este descriptor es leído por un programa llamado ifdtool, que se utilizará para obtener las particiones individuales.
Primero, ifdtool debe ser compilado. Su fuente está contenida bajo la de coreboot, así que cd en el directorio donde se clonó coreboot.
user $
cd util/ifdtool
user $
make
Es una buena idea instalar globalmente, pero no es necesario.
root #
make install
Luego, cd de vuelta a donde esté flash.bin.
user $
ifdtool -x flash.bin
Esto imprimirá una tabla de particiones, y extraerá algunos blobs. Una tabla de particiones estándar puede tener este aspecto:
Región | Descripción | Región de inicio | Región de fin |
---|---|---|---|
0 | Descriptor Flash | 0x00000000 | 0x00000fff |
1 | BIOS (Firmware) | 0x00500000 | 0x00bfffff |
2 | ME | 0x00003000 | 0x004fffff |
3 | GbE | 0x00001000 | 0x00002fff |
4 | Datos de plataforma | sin usar | sin usar |
Datos de configuración de Intel ME y Gigabit Ethernet
Nota cómo la tabla anterior contiene ME y GbE. Estos son blobs binarios que inicializan partes del equipo (En este caso, Intel Management Engine y Gigabit Ethernet). En los dispositivos más antiguos, estos pueden ser eliminados con seguridad con libreboot, pero en Sandy Bridge y más nuevos, son necesarios para que el ordenador funcione correctamente. Dado que Intel ME es necesario en estas placas, debe ser extraído. Sin embargo, coreboot puede reducir drásticamente su tamaño, eliminando su acceso a la red y a los recursos del sistema. Esto es recomendable, ya que no sólo mejora la seguridad, sino que también deja más espacio en el chip flash para otras cargas útiles. Los datos de configuración de Gigabit Ethernet son específicos de cada máquina, y como tal, también deben ser extraídos del chip flash.
En este punto, el directorio de trabajo debe contener cuatro nuevos archivos, que siguen el formato flashregion_*.bin. Estos deberían asignarse a la tabla que se imprimió. Como se mencionó anteriormente, el descriptor, Intel ME y los blobs GbE son necesarios. Renómbralos como descriptor.bin, me.bin y gbe.bin respectivamente, y cópialos en coreboot/3rdparty/blobs/mainboard/<manufacturer>/<model>/; el directorio que fue creado anteriormente.
Configuración y compilación de Coreboot
Ahora, coreboot debe ser configurado para la máquina específica. Lo mejor es comprobar la página wiki de coreboot para el dispositivo dado, en caso de que haya algún requisito determinado. Como tal, esta página tratará de detallar sólo los ajustes que deben establecerse en la mayoría de las instalaciones. Esto no se puede garantizar, y algunos ajustes pueden causar conflictos con la máquina.
Primero, debe introducir la configuración. Esto se realiza de manera similar a la configuración de un kernel.
user $
make nconfig
Alternativamente, uno podría usar menuconfig, o incluso editar el archivo de configuración manualmente (una vez que ha sido generado por nconfig/menuconfig).
Configuración general
Recomiendo activar lo siguiente:
- Utilizar CMOS para los valores de configuración
- Comprimir ramstage con LZMA
- Incluir el archivo coreboot .config en la imagen ROM
- Crear una tabla de marcas de tiempo recogidas durante el arranque
- Construir el ramstage para que sea reubicable en el espacio de direcciones de 32 bits.
Para un dispositivo Sandy Bridge o posterior:
- Permitir el uso del repositorio de sólo binarios
Y si has compilado previamente coreboot, puedes reducir aún más los tiempos de compilación habilitando:
- Actualizar imagen coreboot.rom existente
Placa base
Aquí, el proveedor y el modelo deben ser seleccionados. Asegúrese de introducir el modelo exacto, si hay derivados disponibles (por ejemplo, X220/X220t). También debe seleccionarse el tamaño del chip de la ROM. Esto debería haber sido emitido por flashrom, pero si no se puede determinar comprobando el tamaño de los archivos de flash.bin.
Chipset
Este menú contiene opciones específicas del chipset, y también las ubicaciones de los blobs binarios extraídos anteriormente. Recomiendo habilitar:
- Habilitar VMX para la virtualización
- Ajustar el bit de bloqueo después de configurar VMX
- Pitar en caso de error fatal
- LEDs de flash en caso de error fatal
Estos permitirán una depuración más fácil si tienes un flash malo. Pueden deshabilitarse una vez que se haya creado una configuración de trabajo conocida.
A continuación, se deben proporcionar rutas en Intel Firmware. Habilite estas opciones:
- Agregar archivo Intel descriptor.bin
- Agregar firmware Intel ME/TXE
- Descomponer el firmware Intel ME/TXE
- Agregar firmware gigabit ethernet
Ahora deberían aparecer las opciones para las rutas. Deberían coincidir con los nombres utilizados anteriormente, pero si no es así, corríjalos para que lo hagan.
Dispositivos
Esta área se refiere en gran medida a los gráficos, especialmente en el contexto de los portátiles. Personalmente, tengo la Inicialización de los gráficos establecida en ‘Usar init de gráficos nativos’, y el Modo de pantalla/tambor de trama establecido en ‘Tampón de trama lineal de «alta resolución»‘. El resto de estas opciones deberían estar ya configuradas para la máquina. Si el dispositivo específico requiere una imagen de BIOS VGA, siga el wiki de coreboot.
Controladores genéricos
A menudo los habilito:
- PS/2 keyboard init
Si el dispositivo tiene una tarjeta Intel PCIe WiFi, habilite la opción
- Support Intel PCI-e WiFi adapters
Security
A menudo dejo esto solo, ya que actualmente sólo contiene opciones de Verified Boot, pero si se requiere soporte para esto, habilítelo.
Consola
Esta sección contiene opciones sobre la depuración de consolas. Puede ser útil habilitar ciertas opciones, especialmente si están ocurriendo problemas. He habilitado:
- Secretar CPUs AP desde la consola temprana.
- Enviar la salida de la consola a un buffer CBMEM
- Mostrar códigos POST en la consola de depuración
Tablas del sistema
Habilitar Generar tablas SMBIOS, la única opción aquí.
Cargas útiles
En esta sección se puede elegir la carga útil. Esta página detallará cómo configurar SeaBIOS, ya que tiene la mayor compatibilidad con los sistemas operativos, pero también es posible utilizar GRUB2 para un arranque más rápido, o incluso colocar un kernel en el chip flash (si hay suficiente espacio).
Seleccione lo siguiente para una configuración adecuada de SeaBIOS:
- Añadir una carga útil > SeaBIOS
- Versión de SeaBIOS > master
- Hardware init durante la ejecución de la ROM de opciones
- Utilizar la compresión LZMA para las cargas útiles
También puede desear habilitar algunas cargas útiles secundarias. Estos pueden ser utilizados para la depuración, y el cambio de opciones. Una opción recomendada es nvramcui, que actúa de manera similar a un menú de opciones estándar de la BIOS.
Debugging
Estas opciones son en gran medida para el desarrollo. Los usuarios normales no necesitan activar nada en este submenú.
Compilación
Ahora que la configuración está hecha, coreboot debe ser compilado. Primero hay que construir el compilador cruzado:
user $
make crossgcc-i386 CPUS=${nproc}
Esto requiere que dev-lang/gnat-gpl esté instalado, de lo contrario muchas funciones no funcionarán correctamente.
Una vez hecho esto, compila IASL:
user $
make iasl
Y por último, compila coreboot
user $
make
Flashea coreboot.rom
Esto debería producir un archivo en el directorio build/ llamado coreboot.rom. Esta es la imagen final que necesita ser flasheada. Copie esto en el flasher, si no está ya en él, desmonte el dispositivo de destino y conecte el flasher al chip de flasheo.
En el flasher, utilice flashrom para flashear:
root #
flashrom -p linux_spi:dev=/dev/spidev0.0 -w coreboot.rom
root #
flashrom -p linux_spi:dev=/dev/spidev0.0 -v coreboot.rom
El segundo comando debería devolver VERIFIED. Si es así, coreboot ha sido flasheado con éxito en el dispositivo.
Flasheo vía interna
Una vez que coreboot ha sido flasheado inicialmente, puede ser posteriormente flasheado internamente, sin necesidad de un dispositivo de flasheo externo. Para ello, una vez compilado un nuevo coreboot.rom, simplemente haga lo siguiente:
root #
flashrom -p internal:laptop=force_I_want_a_brick -w coreboot.rom
Aunque esto ha sido probado en varios portátiles, puede que no funcione en el dispositivo utilizado. Asegúrese de comprobar si otros han tenido éxito o fracasos con el flasher interno para el modelo específico.
Solución de problemas
Coreboot no está arrancando (Broken build)
Si coreboot no está arrancando, entonces por lo general significa que o bien no está configurado correctamente, o le falta una carga útil. Asegúrese de que se ha seleccionado un payload adecuado que se ha compilado correctamente, y se ha configurado correctamente.
También es posible que coreboot esté funcionando correctamente, pero el componente gráfico no. Esto puede ser causado por el uso de gfx init nativo. Prueba a volcar una BIOS VGA y usarla en su lugar. También podría ser al revés; intente cambiar de una BIOS VGA a una gfx init nativa. Como último recurso, intente usar el modo de texto VGA Legacy para el modo framebuffer bajo Dispositivos/Pantalla.
Ya no arranca nada (aka SPI chip bricked)
Esto suele ser causado por dejar la máquina encendida mientras se hace el dumping o el flasheo con un flasher externo. Si la máquina no se enciende en absoluto (no se encienden las luces, los ventiladores o la pantalla en el arranque), esto puede significar que la máquina está brickeada. Puede ser posible reparar comprando un nuevo chip flash (asegúrese de que es compatible – trate de usar el mismo fabricante y modelo para obtener los mejores resultados) y flashearlo con la BIOS original o la ROM coreboot. Esto a menudo requiere una soldadura muy delicada, y no es para los débiles de corazón. Puede significar que hay que comprar una nueva máquina, o al menos una nueva placa base.
¡Asegúrese siempre de comprobar que la causa no es un coreboot mal configurado!