coreboot学习2:项目源码的初步了解
2016-03-13 20:58
417 查看
本文主要介绍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命令打印的二级目录,如下:
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)。可搜索一下处理器“微码”方面的资料。
在实践中推荐使用qemu,因为qemu拥有快速、便捷性。在没有实物情况下可以调试跟踪。像Intel、AMD或其它的芯片平台,还需要烧写到开发板上才能验证。另外,使用qemu并不会对coreboot的整体流程跟踪产生影响。
至此,万事俱备,接下来就可以一边在代码添加打印信息(方便观察跟踪),并使用qemu模拟环境启动以便验证。
李迟 2016.3.13 周日 晚
一、目录结构
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命令打印的二级目录,如下:
latelee@latelee:~/bios/coreboot-master/coreboot_m$ tree -L 2 . ├── 3rdparty │ ├── arm-trusted-firmware │ ├── blobs │ ├── chromeec │ └── vboot ├── COPYING ├── MAINTAINERS ├── Makefile ├── Makefile.inc ├── payloads │ ├── bayou │ ├── coreinfo │ ├── external │ ├── Kconfig │ ├── libpayload │ ├── Makefile.inc │ └── nvramcui ├── README ├── src │ ├── acpi │ ├── arch │ ├── commonlib │ ├── console │ ├── cpu │ ├── device │ ├── drivers │ ├── ec │ ├── include │ ├── Kconfig │ ├── lib │ ├── mainboard │ ├── northbridge │ ├── soc │ ├── southbridge │ ├── superio │ └── vendorcode ├── toolchain.inc └── util ├── abuild ├── acpi ├── amdfwtool ├── amdtools ├── archive ├── arm_boot_tools ├── autoport ├── bimgtool ├── board_status ├── broadcom ├── cbfstool ├── cbmem ├── chromeos ├── crossgcc ├── dtd_parser ├── ectool ├── exynos ├── futility ├── fuzz-tests ├── genbuild_h ├── genprof ├── gitconfig ├── ifdfake ├── ifdtool ├── inteltool ├── intelvbttool ├── ipqheader ├── k8resdump ├── kconfig ├── lint ├── marvell ├── mma ├── msrtool ├── mtkheader ├── nvidia ├── nvramtool ├── optionlist ├── post ├── release ├── rockchip ├── romcc ├── sconfig ├── scripts ├── showdevicetree ├── spkmodem_recv ├── superiotool ├── uio_usbdebug ├── vgabios ├── viatool └── xcompile
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 周日 晚
相关文章推荐
- 客户端文件上传分享
- u-boot的配置
- DRIVER_OBJECT,DEVICE_OBJECT 结构体分析
- GSON源码解析
- ecshop登录超时、session过期的解决办法
- MongoDB学习—(6)MongoDB的find查询比较符
- css 实现垂直居中的常用方法
- Fragment小结
- 开源数据库连接池之C3P0
- 通用树的存储结构
- python笔记之字符串格式化
- CSS样式的优先级
- Hdu 2073 无限的路【数学】
- 第二天复习多线程的笔记整理
- Android 双击返回键退出应用程序
- TComponent,TControl,TWinControl,TGraphic的DefineProperties赏析与说明(不懂)
- 20145225 《Java程序设计》第2周学习总结
- MySQL学习(数据库和表的基本操作)
- js简单交互动画,运动吧
- 基于DNS的负载均衡