Chinaunix首页 | 论坛 | 博客
  • 博客访问: 819820
  • 博文数量: 117
  • 博客积分: 2583
  • 博客等级: 少校
  • 技术积分: 1953
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-06 22:58
个人简介

Coder

文章分类
文章存档

2013年(1)

2012年(10)

2011年(12)

2010年(77)

2009年(13)

2008年(4)

分类: 嵌入式

2010-01-29 12:12:59

从Makefile文件中可以对u-boot的构建过程有一个更深入的了解,然而面对数千行的Makefile文件,到底要如何入手确实是让人挺头疼的。突然有种茅塞顿开的感觉,于是乎想把关于Makefile的一点想法记录下来,以期能对那些与我同样在摸索的同道有所助益,当然,想要有更深入的了解,别无他法,还是要老老实实的阅读源文件的Makefile文件的。其实Makefile虽然行数很多,不过也没有很复杂,它的结构还是很清晰简洁的。

首先,我们需要了解的就是U-BOOT的构建过程,一般这样来构建u-boot:先执行命令‘make _config'进行配置,然后执行'make all'进行编译来产生目标文件。
例如:
'make smdk2410_config'
'make all'
产生用于smd2410板的U-BOOT的目标文件。

在此以U-BOOT 1.3.4版的Makefile为例。这个文件总共为3062行,可真够吓人的。

开头是一段注释,是对于这个文件的版权的一些声明。为从第一行到第22行。

紧接着的是一些环境变量的定义。从第24行开始,一直到280行。

(一段Makefile中的注释,对于在源码目录外构建目标的说明)
U-BOOT的Makefile支持在源码目录之外的目录中构建二进制文件。两种方法可以做到这一点:
1)在make命令行中添加 O=
‘make O=/tmp/build all'
2)设置环境变量BUILD_DIR以指向想要构建目标文件的目录
’export BUILD_DIR=/tmp/build'
'make'
第二种方法还可以和一个MAKEALL脚本一起使用
'export BUILD_DIR=/tmp/build'
'./MAKEALL'
命令行的'O='要优先于BUILD_DIR环境变量
紧接着的是用于构建目标文件的目标,也就是all目标,从282行,一直到第461行。

然后是unconfig目标,顾名思义,就是在执行了配置命令之后,却发现不得不更改配置,而用来撤销之前的配置的。

紧接着的就是针对数百个开发板的配置目标,也就是在构建的第一步中传递给make的参数。Makefile中这些目标按照体系结构来排列,在体系结构内又按不同的平台来排列。首先是PowerPC的板,从468行一直到2322行,占有着整个Makefile文件一半以上的行。有针对数量众多的不同平台的不同开发板的配置目标。然后就是ARM体系结构的,从2323行一直到2678行。支持很多种平台,各平台排列依次为StrongARM、ARM92xT Systems、ARM通用开发板、S3C44B0 systems、ARM720T、XScale Systems、ARM1136 Systems。然后是i386架构的,从2680行到2694行。然后是MIPS架构的,从2695行到2776.之后是Nios架构的,没有支持的板子。然后是Nios32架构的...这些配置目标一直到3001行。

然后是一些用于清理、备份等的目标,之前的构建过程的逆过程或者用于备份构建的目标文件的目标。

为了避免无关的信息的打扰,也减轻一下大文件所带给人的心理压力,可以把许许多多的与自己的开发板完全无关的配置目标等清除掉了,这样也可以不分散自己的注意力。最后可以清理出来一个更加简洁、只有短短数百行的这么一个文件。
阅读的时候可以首先看配置目标,因为它是最先被执行的。
接着根据配置目标执行的结果,来阅读前面个环境变量的值,因为很多变量的值都是和配置目标密切相关的。
最后,阅读all目标。
阅读(1730) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~