第一次听到coreboot是在大约一年半多以前,当时因为工作需要进行x86的底层开发,无意中接触到coreboot项目。现在再次对其进行学习。一来让自己也学习一下x86的BIOS开发,二来算对微机原理的一个重新认识吧。
coreboot前称为“LinuxBIOS”,是一个开源的软件项目,旨在替换BIOS或UEFI。大部分使用C语言编写,少部分使用汇编语言,遵循GPLv2协议。由于coreboot是直接初始化硬件的,所以它只支持有限的硬件平台和主板。 目前支持IA-32、x86-64、ARM、ARM64、MIPS和RISC-V。还支持SOC(system-on-a-chip),像Intel的baytrail、braswell、broadwell、skylake,还有nvidia的tegra。
coreboot引入payload概念,在初始硬件初始化后就跳转到payload,比如SeaBIOS,再由SeaBIOS启动Linux内核或Windows 2000。payload也可以是单独的ELF程序,比如 iPXE、gPXE、Etherboot,由它们通过以太网启动Linux内核。
Bootblock阶段
访问flash,查找rom程序。
ROM阶段
初期内存和芯片级的初始化
RAM阶段
枚举设备,分配资源,创建ACPI表,SMM处理。
Payload阶段
coreboot支持的payloads十分众多,也很自由。可以是bootloader,比如SeaBIOS、GRUB 2(Linux常用的bootloader)、OpenBIOS、Tiano Core(一种UEFI的实现)。也可以是操作系统,比如Linux、FreeBSD、Windows、OpenSolaris。无论使用哪一种payload,都需要将其与coreboot程序存储到同一Flash芯片上,在coreboot编译时,会下载配置选择的payload源码,最后编译并生成coreboot.rom。默认的搭配为coreboot+SeaBIOS,——SeaBIOS也可以启动带有grub的Linux系统。如果打算实现UEFI,则可以使用coreboot+TianoCore。在本文发表时,coreboot最新git仓库主分支已经可以选择配置u-boot作为payload了(在2016年2月底提交)。使用qemu模拟器,可以进入到u-boot命令行。
coreboot官网:
coreboot代码仓库:
https://github.com/coreboot/coreboot
coreboot的wiki:
https://en.wikipedia.org/wiki/Coreboot
coreboot payload:
http://www.coreboot.org/Payloads
BIOS人论坛有coreboot子论坛:
http://www.biosren.com/forum-92-1.html