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

本文主要介绍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 周日 晚

你可能感兴趣的:(微机/硬件底层/BIOS)