开发环境:
1 .开发板mini2440
2. u-boot-2010.12
参考i资料:https://blog.csdn.net/androidbbc/article/details/50961163
http://www.cnblogs.com/kele-dad/p/8969174.html
一、下载u-boot- 2010.12,并且解压
二、分析u-boor-2010.12
api: 存放uboot提供的接口函数
config.mk: 根据不同开发板定制的代码,代码也不少
drivers: 驱动,很丰富,每种类型的设备驱动占用一个子目录
MAINTAINERS:
net: 网络相关代码,小型的协议栈
snapshot.commit
arch 与体系结构相关的代码,uboot的重头戏
COPYING
examples 示例程序
MAKEALL
onenand_ipl
tools 辅助程序,用于编译和检查uboot目标文件
board 根据不同开发板定制的代码,代码也不少
CREDITS
fs 文件系统,支持嵌入式开发板常见的文件系统
Makefile
post 加电自检程序
boards.cfg
disk 磁盘分区相关代码
include 头文件,已通用的头文件为主
mkconfig
README
common 通用的代码,涵盖各个方面,已命令行处理为主
doc 文档,一堆README开头的文件
lib 通用库文件
nand_spl NAND存储器相关代码
rules.mk
> 移植的主要相关的目录为arch、board目录
arm目录
cpu arm920t目录:
vi u-boot.lds
可以看到第一个执行的程序是start.s
>cd board/samsung/smdk2410/ 进入和单板相关的目录
lowlevel_init.s :和内存控制初始化相关的函数
smdk2410.c是和单板初始化相关的函数
三、分析u-boot编译流程
一般我们编译u-boot的流程为:
1. 配置 make xxx_config
2. 编译 make
> make xxx_config 分析
当这个命令执行时,它会根据 kconfig 及 xx_defconfig 来生成 .config 文件
- Makefiles 有 5 个部分:
- Makefile:顶层 Makefile,提供针对各种目标的接口,一般和实现无关。当我们要针对某个目标进行分析时,作为起点,总是尝试在此文件中找到对应的目标定义,然后沿着该定义深入挖掘。
- .config:uboot 配置文件,如果是内核,就是内核的配置文件,在配置 uboot时候生成,所有的 Makefile 文件(包括顶层目录及各级子目录)都是根据 .config 来决定使用哪些文件。
- arch/$(ARCH)/Makefile:平台相关 Makefile,提供针对不同架构的目标,变量和规则定义。文件位置比较固定
- scripts/Makefile.*:Makefile 共用的通用规则、脚本等
- kbuild Makefiles:各级子目录下的 Makefile,相对简单,被上一层 Makefile 调用来编译当前目录下的文件。
顶层 Makefiles 读取从uboot 配置程序中生成的 .config 文件