说明:文件位置:在uboot的目录下,文件名为:Makefile
从文件的头部开始分析
1、24-29行,配置uboot的版本信息。
VERSION = 1
PATCHLEVEL = 3
SUBLEVEL = 4
EXTRAVERSION =
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
VERSION_FILE = $(obj)include/version_autogenerated.h
2、主机的环境信息(比如:我现在是虚拟机的Ubuntu10.04下开发的,就是i686,linux。)
![](https://i-blog.csdnimg.cn/blog_migrate/4ab11d6714a4f3f99d2e6bd60a9b2efc.png)
3、配置为静默编译的设置(使用方法:make -s;这个-s会作为MAKEFLAG传个Makefile,下面的XECHO就会变成空)
![](https://i-blog.csdnimg.cn/blog_migrate/7b516eca803eb9264dd41e38a94cd9c8.png)
4、是否配置为当独输出文件夹方式编译(使用方法:make -0=输出目录)
![](https://i-blog.csdnimg.cn/blog_migrate/b6680ed1dd9137da700e32d310138c62.png)
5、设置目标路径、源文件路劲、顶层目录、连接目录。并导出为环境变量
![](https://i-blog.csdnimg.cn/blog_migrate/496c294e0164a6e587354a78775f94ff.png)
6、调用mkconfig配置脚本(文件就在uboot下,后续会进一步分析这个脚本)
![](https://i-blog.csdnimg.cn/blog_migrate/67ab54fa32d76a3cab6b1a60bed7624c.png)
7、加载include目录下的config.mk文件,里面的信息是ARCH/CPU/BOARD/VENDOR/SOC。这个文件是在配置过程中产生的(make x210_sd_config)。
举例:我们的配置就是arm s5pc11x samsung s5pc110
![](https://i-blog.csdnimg.cn/blog_migrate/5ae2fa1c07e6e8c40eb48538d1dd7f0c.png)
补充:配置过程的代码
![](https://i-blog.csdnimg.cn/blog_migrate/e39628942409e2dd086ab3e072b12a53.png)
8、配置交叉编译工具链(部分代码)
![](https://i-blog.csdnimg.cn/blog_migrate/1fb821473a63cda6aa1e09dda85e85c0.png)
9、调用配置config.mk文件(config.mk是一个makefile,进行一些配置,后续后进一步分析)
![](https://i-blog.csdnimg.cn/blog_migrate/add0eb62326bec6b2be895e482bae75c.png)
10、后面剩下就是Makefile的主要编译的一些东西
总结:分析主Makefile不能孤立的分析,因为里面有调用其它的文件(mkconfig、config.mk)。首先在框架上分析,对主Makefile有一个大概的了解,然后再去具体的分析和查找里面的文件和变量。