coreboot - coreboot

coreboot
Gráfico de una liebre corriendo en blanco y negro sobre el texto "coreboot" en letra minúscula sans-serif
Autor (es) original (es) Ronald G. Minnich, Eric Biederman, Li-Ta (Ollie) Lo, Stefan Reinauer y la comunidad coreboot
Versión inicial 1999 ; Hace 22 años (1999)
Lanzamiento estable
4.14 / 10 de mayo de 2021 ; hace 5 meses (2021-05-10)
Repositorio
Escrito en Mayormente C , y alrededor del 1% en ensamblaje . Opcionalmente Ada
Plataforma IA-32 , x86-64 , ARMv7 , ARMv8, MIPS , RISC-V , POWER8
Escribe Firmware
Licencia GPLv2
Sitio web www .coreboot .org Edita esto en Wikidata

El proyecto de software coreboot , anteriormente conocido como LinuxBIOS , tiene como objetivo reemplazar el firmware propietario ( BIOS o UEFI ) que se encuentra en la mayoría de las computadoras con un firmware liviano diseñado para realizar solo el número mínimo de tareas necesarias para cargar y ejecutar un moderno de 32 bits o 64 -sistema operativo de bits .

Dado que coreboot inicializa el hardware básico, debe transferirse a cada chipset y placa base que admita. Como resultado, coreboot está disponible solo para un número limitado de plataformas de hardware y modelos de placa base.

Una de las variantes de coreboot es Libreboot , una distribución de software totalmente libre de blobs patentados , dirigida a usuarios finales.

Historia

El proyecto coreboot comenzó en el invierno de 1999 en el Laboratorio de Computación Avanzada del Laboratorio Nacional de Los Alamos (LANL), con el objetivo de crear un BIOS que se iniciara rápido y manejara los errores de manera inteligente. Tiene licencia según los términos de la Licencia Pública General GNU (GPL). Los principales contribuyentes incluyen LANL , SiS , AMD , Coresystems y Linux Networx, Inc, así como los proveedores de placas base MSI , Gigabyte y Tyan , que ofrecen coreboot junto con su BIOS estándar o proporcionan especificaciones de las interfaces de hardware para algunas de sus placas base. Google patrocina en parte el proyecto coreboot. CME Group , un grupo de bolsas de futuros , comenzó a respaldar el proyecto coreboot en 2009.

Coreboot ha sido aceptado en siete años consecutivos (2007-2014) para Google Summer of Code . Aparte de los tres primeros modelos, todos los Chromebook ejecutan coreboot. El código de Das U-Boot se ha asimilado para permitir la compatibilidad con procesadores basados ​​en el conjunto de instrucciones ARM .

En junio de 2019, Coreboot comenzó a utilizar el software Ghidra de la NSA para sus esfuerzos de ingeniería inversa en problemas específicos del firmware luego del lanzamiento de código abierto del paquete de software.

Plataformas compatibles

Las arquitecturas de CPU compatibles con coreboot incluyen IA-32 , x86-64 , ARM , ARM64 , MIPS y RISC-V . Las plataformas de sistema en un chip (SOC) compatibles incluyen AMD Geode , comenzando con el procesador Geode GX desarrollado para OLPC . Artec Group agregó compatibilidad con Geode LX para su modelo ThinCan DBE61; AMD adoptó ese código y mejoró aún más para OLPC después de que se actualizó a la plataforma Geode LX, y la comunidad coreboot lo desarrolló aún más para admitir otras variantes de Geode. Coreboot se puede flashear en una plataforma Geode usando Flashrom .

A partir de ese desarrollo inicial en las plataformas basadas en AMD Geode, la compatibilidad con coreboot se ha extendido a muchos procesadores y conjuntos de chips AMD. La lista de procesadores incluye Family 0Fh y 10h ( núcleo K8 ), y recientemente Family 14h ( núcleo Bobcat , Fusion APU ). La compatibilidad con Coreboot también se extiende a los conjuntos de chips AMD: RS690 , RS7xx , SB600 y SB8xx.

Arquitectura de software encapsulado genérico de AMD ( AGESA ) ‍ —un protocolo de arranque mediante el cual se inicializan los dispositivos del sistema en las placas base AMD64— se abrió a principios de 2011, con el objetivo de proporcionar la funcionalidad requerida para la inicialización del sistema coreboot en hardware AMD64. Sin embargo, estos lanzamientos nunca se convirtieron en la base del desarrollo futuro de AMD y posteriormente se detuvieron.

Los dispositivos que se pueden precargar con coreboot o uno de sus derivados incluyen algunos Chromebooks basados ​​en x86 , Libreboot X200 y T400 (renombrados ThinkPad X200 y T400, respectivamente, disponibles en Minifree, anteriormente conocido como Gluglug), OLPC XO de One Laptop por Iniciativa infantil , modelos ThinCan DBE61, DBE62 y DBE63, y hardware de enrutador / servidor sin ventilador fabricado por PC Engines . Todas las computadoras portátiles Librem vienen con coreboot.

Algunas PC System76 utilizan el firmware coreboot TianoCore, incluido el firmware del controlador integrado de código abierto .

Diseño

Coreboot normalmente carga un kernel de Linux , pero puede cargar cualquier otro ejecutable ELF independiente , como iPXE , gPXE o Etherboot que puede arrancar un kernel de Linux a través de una red , o SeaBIOS que puede cargar un kernel de Linux, Microsoft Windows 2000 y posterior. y BSD (anteriormente, ADLO proporcionaba soporte para Windows 2000 / XP y OpenBSD). Coreboot también puede cargar un kernel desde cualquier dispositivo compatible, como Myrinet, Quadrics o interconexiones de clúster SCI . También es posible arrancar otros núcleos directamente, como un núcleo Plan 9 . En lugar de cargar un kernel directamente, coreboot puede pasar el control a un cargador de arranque dedicado, como una versión de GNU GRUB 2 compatible con coreboot .

Coreboot está escrito principalmente en C , con una pequeña cantidad de código ensamblador . La elección de C como lenguaje de programación principal permite auditorías de código más fáciles en comparación con la BIOS de PC contemporánea que generalmente se escribía en ensamblador, lo que da como resultado una seguridad mejorada. Hay soporte de compilación y tiempo de ejecución para escribir partes de coreboot en Ada para elevar aún más la barra de seguridad, pero actualmente solo se usa esporádicamente. El código fuente se publica bajo la licencia GNU GPL versión 2 .

Coreboot realiza la cantidad mínima absoluta de inicialización de hardware y luego pasa el control al sistema operativo . Como resultado, no hay código coreboot ejecutándose una vez que el sistema operativo ha tomado el control. Una característica de coreboot es que la versión x86 se ejecuta en modo de 32 bits después de ejecutar solo diez instrucciones (casi todos los demás BIOS x86 se ejecutan exclusivamente en modo de 16 bits ). Esto es similar al firmware UEFI moderno , que se usa en hardware de PC más nuevo.

Por sí mismo, coreboot no proporciona servicios de llamada al BIOS . La carga útil de SeaBIOS se puede utilizar para proporcionar llamadas al BIOS y, por lo tanto, permitir que coreboot cargue los sistemas operativos que requieren esos servicios, como Windows 2000 / XP / Vista / 7 y BSD. Sin embargo, la mayoría de los sistemas operativos modernos acceden al hardware de otra manera y usan las llamadas al BIOS solo durante la inicialización temprana y como mecanismo de reserva.

Etapas de Coreboot

  1. Etapa de bloqueo de arranque: prepárese para obtener acceso a Flash y busque la etapa de ROM para usar
  2. Etapa de ROM: memoria e inicio de chipset temprano (un poco como PEI en UEFI)
  3. Etapa RAM: CPU, chipset, placa base y periférico init, asignación de recursos PCI, creación de tabla ACPI, controlador SMM (un poco como etapa DXE en UEFI)
  4. Carga útil.

Inicializando DRAM

El hardware más difícil que coreboot inicializa son los controladores DRAM y DRAM . En algunos casos, la documentación técnica sobre este tema está restringida por NDA o no está disponible. La inicialización de RAM es particularmente difícil porque antes de que se inicialice la RAM no se puede utilizar. Por lo tanto, para inicializar los controladores DRAM y DRAM, el código de inicialización puede tener solo los registros de propósito general de la CPU o Cache-as-RAM como almacenamiento temporal.

romcc , un compilador de C que usa registros en lugar de RAM, facilita la tarea. Con romcc, es relativamente fácil hacer que SMBus acceda a las ROM SPD de los DIMM DRAM , lo que permite utilizar la RAM.

Con los procesadores x86 más nuevos, la caché del procesador se puede utilizar como RAM hasta que se inicialice la DRAM. La caché del procesador también debe inicializarse en modo Cache-as-RAM, pero esto necesita menos instrucciones que inicializar DRAM. Además, la inicialización del modo Cache-as-RAM es específica de las arquitecturas de CPU, por lo que es más genérica que la inicialización de DRAM, que es específica para cada chipset y placa base.

Para la mayoría de las plataformas x86 modernas, los componentes binarios de código cerrado proporcionados por el proveedor se utilizan para la configuración de DRAM. Para los sistemas Intel, se requiere FSP-M, mientras que AMD no tiene soporte actual. Binary AGESA se utiliza actualmente para firmware UEFI propietario en sistemas AMD, y se espera que este modelo se transfiera a cualquier soporte futuro de arranque de núcleo relacionado con AMD.

Desarrollo y depuración de coreboot

Hackear coreboot en la cumbre de Denver 2008.

Dado que coreboot debe inicializar el hardware básico, debe transferirse a cada chipset y placa base que admita. Antes de inicializar la RAM , coreboot inicializa el puerto serie (direccionamiento de caché y registros únicamente), para que pueda enviar texto de depuración a un terminal conectado . También puede enviar códigos de bytes al puerto 0x80 que se muestran en una pantalla de dos dígitos hexadecimales de una tarjeta POST conectada .

Otra ayuda para la portabilidad fue el producto comercial "RD1 BIOS Savior" de www.ioss.com.tw (que no debe confundirse con el personal de soporte de OPSEC interagencial de EE. UU. En www.iad.gov/ioss/) que era una combinación de dos memorias de arranque dispositivos que se conectan al zócalo de la memoria de arranque y tienen un interruptor manual para seleccionar entre los dos dispositivos. La computadora podría arrancar desde un dispositivo, y luego el interruptor se puede alternar para permitir que la computadora reprograme o "flashee" el segundo dispositivo. Una alternativa más cara es un programador flash EEPROM / NOR externo .

También hay emuladores de CPU que reemplazan la CPU o se conectan a través de un puerto JTAG , con Sage SmartProbe como ejemplo. El código puede construirse o descargarse en emuladores de BIOS en lugar de actualizar el dispositivo BIOS.

Cargas útiles

Carga útil SeaBIOS que se ejecuta en un Lenovo ThinkPad X60

Coreboot puede cargar una carga útil, que puede escribirse utilizando la biblioteca auxiliar libpayload . Las cargas útiles existentes incluyen lo siguiente:

  • SeaBIOS , una pequeña implementación de BIOS x86, escrita principalmente en C de 16 bits utilizando el compilador GNU C
  • TianoCore , una implementación gratuita y de código abierto de UEFI
  • OpenBIOS , una implementación gratuita y de código abierto de Open Firmware
  • GNU GRUB , un gestor de arranque
  • FILO, un cargador de arranque similar a GRUB con soporte de arranque USB
  • Etherboot , puede arrancar un sistema operativo a través de la red
  • gPXE / iPXE , el sucesor de Etherboot, funciona cuando se ejecuta bajo SeaBIOS o TianoCore
  • Depthcharge es utilizado por Google para Chrome OS
  • Google utilizó una rama de Das U-Boot para Chromium OS en el pasado

Conferencia europea de Coreboot

Una reunión física es la European Coreboot Conference que se organizó en octubre de 2017 y duró 3 días.

Historia de la conferencia

Evento y año Fecha Ciudad anfitriona Sede Recursos Temas
ECC2017 26.10. - 29,10 Bochum , alemania Centro de convenciones RUB https://ecc2017.com

Variantes

Coreboot tiene una serie de variantes de su base de código original, cada una con objetivos ligeramente diferentes:

  • librecore: una variante que se centra más en la libertad , las computadoras con conjuntos de instrucciones que no son x86 y los marcos de desarrollo de firmware.
  • Libreboot : una variante con un enfoque principal para eliminar todas las manchas binarias.

Libreboot se ha establecido como una distribución de coreboot sin blobs binarios patentados . Libreboot no es una bifurcación directa de coreboot; en cambio, es un esfuerzo paralelo que trabaja en estrecha colaboración y se vuelve a basar cada cierto tiempo en el último coreboot como proveedor ascendente, con parches fusionados ascendente siempre que sea posible. Además de eliminar el software propietario, libreboot también intenta hacer que coreboot sea fácil de usar mediante la automatización de los procesos de construcción e instalación.

El proyecto Libreboot hizo posibles las modificaciones necesarias para las variantes completamente libres de algunos portátiles ThinkPad , MacBook y ARM Chromebook .

Ver también

Referencias

Otras lecturas

enlaces externos