coreboot学习0:二度相逢是初识

来源:互联网 发布:mysql -> 编辑:程序博客网 时间:2024/04/29 14:06

第一次听到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官网:

http://www.coreboot.org

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



0 0
原创粉丝点击