uboot 2010.06阅读分析

1.uboot编译系统。
采用与linux内核类似的编译系统。在根Makefile文件中,先根据用户配置,如 at91rm9200dk_defconfig,调用mkconfig对系统用的一些头文件和目录进行操作,并在include目录下产生 config.mk文件和config.h文件。
在使用make all对系统进行编译。这时将通过include/config.h文件产生include/autoconf.mk文件,该文件包含了系统编译时可能需要选择的所有文件。

进 行具体编译时,各个子目录下的Makefile文件首先包含根目录下的config.mk文件,该文件包含了编译时的参数和对各种文件的编译动作。在各个 子目录下的Makefile最后包括根目录下的rules.mk文件,该文件产生源文件的依赖关系。再说说各个子目录下的Makefile,除了包含上面 两个文件以后,它里面包含的就是针对该目录下的各个源文件的编译处理。其类似Linux内核源代码。采用
COBJS-(CONFIG_XXX) += XXX.O
的形式。这个CONFIG_XXX来自于前面的include/autoconf.mk。如果需要加入某种配置,我们可以在include/configs/xxx.h针对目标板进行配置。这个必须是手工完成。比起Linux内核的图形化配置环境,这个要麻烦点。
有一点提起注意,以前的uboot-1.1.x版本,配置有两种,一种以CONFIG_开头,另一种以CFG_开头。现在全部改用CONFIG_了,移植到新的版本时要特别注意。

2.uboot文件分布
api/ uboot导入的API接口
arch/与体系结构有关的文件,每种处理器一个目录。
arch/arm 与ARM有关文件
arch/arm/cpu ARM处理器中每种处理器型号一个目录,另外每种处理器型号下还可能会有具体某款芯片型号目录
arch/arm/include ARM公用的头文件
arch/arm/lib ARM公用的库
其他体系结构类似
board/针对某块板的一些文件
common公用功能,主要是些命令和环境变量的处理,其中main.c包含了功能的入口。
其他的目录不用做过的介绍,看名称就应该知道其用途。

3.uboot运行顺序:
以arm920t型号CPU为例。
首 先arch/arm/cpu/arm920t/start.S 进行系统初始化和将UBOOT拷贝到其它地方运行。然后通过调用start_armboot(arch/arm/lib/board.c)进行一系列的初 始化。如果系统没有输入就直接引导系统,如果有调用main_loop(common/main.c)进行处理,并由common/comand.c来处 理用户输入命令,来调用具体命令进行操作。总的来说uboot主要做了几件事:
1).初始化系统
2).引导操作系统
3).接受用户输入,进行处理
4).设置环境变量
对bootloader来说有前面两项功能就可以了,后面两项主要用在开发阶段,用来调试和系统配置,和进行一些简单的验证和开发。

作者: embs   发布时间: 2010-09-16