本文以linaro提供的针对pandaboard的u-boot为例(之后用来加载Android),阐述u-boot编译及代码结构。
- U-boot是神马
简单说来就是嵌入式设备的BIOS, 用来初始化嵌入式设备上的各种硬件资源,并引导linux kernel的加载及启动。
详细描述请从http://www.denx.de/wiki/U-Boot上获得你所想要的一切信息。
另外, http://www.ibm.com/developerworks/cn/linux/l-btloader/也是一篇不可多得的介绍bootloader的文章!
- pandaboard u-boot的编译
相关代码如何下载,请参照《玩转pandaboard之初体验》- 首先通过device/linaro/pandaboard/目录下的各个mk文件把u-boot及对应kernel的编译融入到Android的整个编译体系当中。
这里就不多说了,熟悉Android编译体系结构的同学一看就明白(或者找到相应的变量, 在build/目录下grep,就一定能找到你想要的结果) - 与u-boot编译相关的参数都在BoardConfig.mk中指定了, 从中可以看出, TI已经基本放弃了x-load, 转而使用u-boot自带的SPL来作为second stage的bootloader
(第一是, ROM boot, 第三则是u-boot自身)
UBOOT_CONFIG := omap4_panda_config
TARGET_USE_XLOADER := false
XLOADER_CONFIG := omap4430panda_config
- 首先,使用make omap_panda_config来初始化u-boot的config环境
这里需要注意从Makefile中可以看出, make指令会去解析你所输入的xxxxx_config的参数, 然后找到对应的board的相关配置信息.
比如,这里会调用mkconfig, 读取boards.cfg中的信息, 来确定相关的信息(ARCH, CPU, SoC, Vendor, Target)
- 然后调用, make CROOSS_COMPILE=xxxxx来编译u-boot,
请注意,这里目前使用的最新的Codesourcery的CodeBench, 会有编译错误, 从网上的资料来说是因为它使用了gcc4.6.1, 其中有bug(会导致编译oma4的clock.c出错)
,我又先后尝试了几个之前的版本, 发现arm-2011.03-41-arm-none-linux-gnueabi.bin这个版本的最近的能够编译成功的版本.
- 首先通过device/linaro/pandaboard/目录下的各个mk文件把u-boot及对应kernel的编译融入到Android的整个编译体系当中。
- pandaboard u-boot的代码结构
- 目录结构
/arch Architecture 相关的文件
/arm ARM architecture相关的文件
/cpu CPU 相关
/include
/armv7 Files specific to ARM v7 CPUs
/omap4 omap4相关的一些相关的文件
*.c
...
/lib ARM Architecture相关的库文件
/api
- 目录结构