本文主要介绍coreboot源码的目录结构和其它一些东西。
一、目录结构
1、一级目录
coreboot的一级目录比较少,现分别简单。
src:源码目录,后文再介绍。
util:工具目录,编译使用到的命令,一些脚本,等等。比如sconfig根据代码生成static.c文件,该文件在枚举设备时十分重要。而romcc则是在编译中使用到的命令。另外,还有一些有用的工具,如读写msr寄存器的msrtool。
payloads:该目录存储的是当前支持的payload。在子目录external中,就有GRUB2、SeaBIOS、U-Boot等其名的bootloader。
3rdparty:第三方库目录,里面有vboot、arm-trusted-firmware。注意,coreboot的git仓库上这几个是引用其它的仓库,所以clone下来是暂时没有内容的,只有要编译时才会去clone,之后就不会再执行了。
build:编译专用目录,生成的最终文件coreboot.rom便位于此目录。
Documentation:文档目录。在ubuntu下使用doxygen可以生成代码html文档,使用命令安装:$ sudo apt-get install doxygen graphviz。进入该目录,执行doxygen Doxyfile.coreboot即可生成。
下面是用tree命令打印的二级目录,如下:
1 | latelee@latelee:~/bios/coreboot-master/coreboot_m$ tree -L 2 |
2、src目录
下面简单说说src目录的子目录。
arch:平台架构代码。当前支持的有arm、arm64、mips、x86,等等。
commonlib:共用库。如cbfs。
console:终端代码,比如printk实现,还有终端初始化。
cpu:该目录包括了allwinner、amd、intel、x86模拟器qemu-x86。其中x86目录包含了入口函数(即上电启动第一条指令)。
device:设备目录。比如重要的文件有device.c、pci_device.c,等。
drivers:驱动目录。
mainboard:主板目录。里面包含了各式各样的主板。比如qemu使用的“主板”代码位于emulation目录。
northbridge:北桥芯片目录。
southbridge:南桥芯片目录。
soc:一些“平台”的代码目录。比如大名鼎鼎的英特尔(Intel)的baytrail、braswell、skylake、quark,等(注:感觉coreboot对英特尔还是很到位的,新出的平台很快能支持)。还有英伟达(nvidia)的tegra。
vendorcode:厂商微码目录。比如英特尔(Intel)的固件支持包(fsp)。可搜索一下处理器“微码”方面的资料。
二、编译配置
coreboot配置使用make menuconfig进行,与大部分的大型开源项目(比如Linux内核、openwrt,等)类似。
在实践中推荐使用qemu,因为qemu拥有快速、便捷性。在没有实物情况下可以调试跟踪。像Intel、AMD或其它的芯片平台,还需要烧写到开发板上才能验证。另外,使用qemu并不会对coreboot的整体流程跟踪产生影响。
至此,万事俱备,接下来就可以一边在代码添加打印信息(方便观察跟踪),并使用qemu模拟环境启动以便验证。
李迟 2016.3.13 周日 晚