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
- coreboot学习0:二度相逢是初识
- coreboot学习10:coreboot第一阶段学习小结
- 相逢是一种缘
- C++的二度学习
- 【BZOJ4869】【SHOI2017】相逢是问候
- 4869: [Shoi2017]相逢是问候
- 相逢
- 你是我人生,最好的相逢
- 【GDOI2018模拟7.9】相逢是问候
- 【GDOI2018模拟7.9】相逢是问候
- [题解]bzoj4869 SHOI2017相逢是问候
- C++的二度学习(转载)
- coreboot学习2:项目源码的初步了解
- coreboot学习3:启动流程跟踪之bootblock阶段
- coreboot学习1:编译并使用qemu模拟
- coreboot学习4:启动流程跟踪之romstage阶段
- coreboot学习6:ramstage阶段之芯片初始化流程
- coreboot学习7:ramstage阶段之设备枚举流程
- 小试循环
- 给定一个无序数组,找到其中最小的K个数
- 第二周项目3——小试循环(5)
- 14. Longest Common Prefix(leetcode)
- Android 解决65535的限制
- coreboot学习0:二度相逢是初识
- 自考C++程序设计试题2009年10月
- 最少步数
- 《JAVA与模式》之观察者模式
- MySQL索引详解-02
- 2016年2月鼎桥工作记
- 需要排序的最短子数组长度
- java并发代码同步
- ctrl-c z d