coreboot | |
---|---|
Tipo de | software integrado , cargador de sistema operativo y software gratuito y de código abierto |
Autor | Ronald G. Minnich, Eric Biederman, Li-Ta (Ollie) Lo, Stefan Reinauer y la comunidad coreboot |
Escrito en | C y lenguaje ensamblador |
Primera edición | septiembre de 1999 [2] |
plataforma de hardware | BRAZO , IA-32 y x86_64 |
ultima versión |
|
Estado | actualizado, en desarrollo |
Licencia | GNU GPL 2 |
Sitio web | coreboot.org _ |
Archivos multimedia en Wikimedia Commons |
coreboot (anteriormente LinuxBIOS [3] ) es un proyecto de firmware gratuito para varias PC aprobado por la Free Software Foundation . El objetivo del proyecto es reemplazar los sistemas BIOS y UEFI patentados y cerrados que utilizan la mayoría de las computadoras personales por uno liviano diseñado exclusivamente para iniciar y ejecutar sistemas operativos modernos de 32 y 64 bits .
Dado que coreboot inicializa el hardware, el diseño debe adaptarse a cada conjunto de chips y cada placa base . Como resultado, coreboot solo está disponible para un número limitado de plataformas de hardware y modelos de placas base.
Una variante de coreboot es Libreboot , una variante de coreboot que tiene como objetivo eliminar por completo el firmware propietario (Blobs) .
La tarea típica de coreboot es cargar el kernel de Linux , pero además, coreboot puede cargar y ejecutar archivos ejecutables ELF , comúnmente conocidos como cargas útiles . La carga útil puede ser, por ejemplo, Etherboot , que puede arrancar Linux a través de la red, o SeaBIOS , una implementación de BIOS gratuita que le permite arrancar sistemas Windows 2000/XP/Vista/7 y *BSD (anteriormente se usaba la carga ADLO para esto ). Coreboot puede iniciar el sistema operativo desde cualquier dispositivo compatible, como Myrinet , QsNet o SCSI .
Coreboot realiza la inicialización del hardware, que el sistema operativo no puede realizar por completo, después de lo cual transfiere el control al módulo Payload, que puede realizar más cargas del sistema operativo o realizar otras acciones útiles.
Coreboot admite arquitecturas x86 , x86-64 , ARM , ARM64, MIPS y RISC-V .
La diferencia entre coreboot y Legacy BIOS es que la versión x86 comienza en modo protegido después de ejecutar solo dieciséis instrucciones del procesador, mientras que las BIOS x86 típicas se ejecutan principalmente en el modo real del procesador. La combinación de estos factores y la simplicidad del diseño interno hace que el arranque desde Coreboot sea muy rápido (actualmente, el registro de arranque en frío con CoreBoot es de unos 3 segundos).
Aunque LinuxBIOS tenía la palabra Linux en su nombre, LinuxBIOS también podía cargar otros kernels de sistemas operativos. Por ejemplo, LinuxBIOS podría cargar directamente el kernel Plan 9 . Por lo tanto, se le ha cambiado el nombre a coreboot .
Coreboot en sí es solo un pequeño programa que inicializa el hardware en la placa base, luego el control se transfiere a uno de los programas de carga útil:
Dado que coreboot debe inicializar el hardware, debe adaptarse para admitir cada controlador del sistema ( conjunto de chips ) y cada placa basada en dicho controlador. Agregar soporte para cualquier placa nueva se complica debido a las dificultades de depuración: la información de depuración se emite utilizando este o aquel hardware, pero ¿cómo organizar la salida cuando los medios de salida aún no se han inicializado?
Coreboot utiliza varios dispositivos y trucos para facilitar la depuración:
La parte más compleja de coreboot es el código que inicializa la RAM y el controlador de RAM. El caso es que hasta que no se inicialice la memoria RAM, no se podrá utilizar. La forma obvia de inicializar el controlador de RAM y la propia RAM sin acceder a ella es utilizar los registros de propósito general del procesador. Para simplificar esta tarea compleja, se desarrolló un compilador especial en lenguaje C : romcc ( ing. romcc ) , que genera código que no realiza accesos a la RAM durante su trabajo. romcc compila el código que inicializa la RAM accediendo a la ROM SPD en DIMM a través de SMBus . Después de ejecutar este código, se puede usar la RAM.