时间过得真快,从今年2月份开始到4月份,断断续续摸索coreboot的源码。限于精力但又不想让人误以为笔者是个容易放弃的人,只好匆匆将前面所做的工作称为第一阶段,用时髦的话,也叫一期工程。此文做些阶段性的小结,以表示阶段性的结束。
coreboot学习9:ramstage阶段之设备初始化流程
本文对ramstage阶段的设备初始化过程进行跟踪。设备初始化是在dev_initialize函数中完成的,代码如下:
coreboot学习8:ramstage阶段之资源分配流程
设备枚举后就是资源分配了,在dev_configure函数中完成,代码如下:
coreboot学习7:ramstage阶段之设备枚举流程
本文主要针对ramstage阶段的设备枚举的过程进行分析。限于精力,就直接使用qemu-i440fx作为分析,baytrail就免了吧。在分析时,不一定会根据顺序,也不一定会详细到每个函数。如果要详细的信息,请查阅代码。也建议根据前文给出的主干流程图进行参照分析。
coreboot学习6:ramstage阶段之芯片初始化流程
从本文开始,就根据前文给出的ramstage的主干线索分析每个小阶段执行的过程。依然以qemu-i440fx为主做分析——因为当前条件只有这个“主板”才能在通过打印跟踪其过程。另外,也会列出baytrail的相关函数,但可能会存在部分瑕疵。
coreboot学习5:启动流程跟踪之ramstage阶段主干分析
ramstage阶段涉及比较多的操作,比如枚举板子上的外围设备,分配资源(PCI),使能设备。本文根据该阶段的主干函数流程做分析,细节方面不涉及。理顺这个主干,从全局上把控大致流程。
coreboot学习4:启动流程跟踪之romstage阶段
romstage是coreboot的第二个执行阶段。本文分别介绍基于qemu模拟环境的x86的跟踪,以及基于Intel baytrail平台的跟踪。
在romstage阶段,由于内存还未初始化好,所以使用cache作为内存,此项技术称为“cache as ram”,简称为“CAR”。网络上有较多文章涉及此方面,可以查阅以了解更多。
coreboot学习3:启动流程跟踪之bootblock阶段
coreboot的第一个启动阶段为bootblock。该阶段均使用汇编语言编写。下面根据执行文件顺序介绍。
coreboot学习2:项目源码的初步了解
本文主要介绍coreboot源码的目录结构和其它一些东西。
coreboot学习1:编译并使用qemu模拟
对于一种新东西的学习,如果有看得到、摸得着的演示,比单纯看理论知道更容易理解。在未对coreboot进行代码级别分析之前,用一个实例来看看coreboot到底长什么样子。
本文讲述如何在linux环境中编译coreboot,并使用qemu模拟器来启动。
coreboot学习0:二度相逢是初识
第一次听到coreboot是在大约一年半多以前,当时因为工作需要进行x86的底层开发,无意中接触到coreboot项目。现在再次对其进行学习。一来让自己也学习一下x86的BIOS开发,二来算对微机原理的一个重新认识吧。
BIOS调查笔记
本文简单整理一下BIOS厂商分类,以及BIOS替换者UEFI。还涉及到一些开源的BIOS项目介绍。大部资料均来自互联网。
linux C语言调用Intel处理器CPUID指令的实例
在之前写的文章中,仅简单讲了一下CPUID指令,通过该指令可以获取很多和处理器相关的信息,如处理器的系列、型号、内存地址是多少位,等等。本文在Linux环境下,使用C语言内嵌汇编的手段使用CPUID指令,进而在高级语言层面上看到获取的信息。