您的位置:首页 > 其它

coreboot学习2:项目源码的初步了解

2016-03-13 20:58 417 查看
本文主要介绍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命令打印的二级目录,如下:

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 周日 晚
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: