Makefile 目录:
Board-------------------平台依赖,每个板子在board目录下对应一个子目录
Cpu----------------------CPU依赖,每个CPU对应一个子目录
Lib-arm----------------- ARM体系结构通用文件
Common---------------通用的多功能函数
Include-----------------与板子相关的头文件和板级配置文件
Lib_generic------------通用库
Net----------------------网络协议
Drivers------------------通用设备驱动
以海思hi3521uboot为例分析
Uboot makefile过程:
make clean; make distclean
make godeyes_config
make ARCH=arm PILE=arm-hisiv200-linux- godarm_config
Uboot 编译的三种方式:
make O=/temp/build all
export BUILD_DIR=/temp/build; make
没有定义BUILD_DIR变量,生成的目标文件在源码目录下
一般采用第三种方式。
Make godeyes_config 编译分析
##定义了makefile的几个变量,uboot的版本VERSION=2010,PATCHLEVEL=06,U_BOOT_VERSION=
HOSTARCH=i686
HOSTOS=linux
SHELL=/bin/bash
然后导出这些变量作为环境变量,供子shell使用。
Ifeq (,$(findstring s,$(MAKEFLAGS))) 为真,XECHO=echo
## ifdef O 如果定义了O变量,则$(origin O)判断变量O的来源,如果变量O在make命令的参数里定义,则$(origin O)mand origin函数
函数“origin”和其他函数不同,函数“origin”的动作不是操作变量(它的参数)。它只是获取此变量(参数)相关的信息,告诉我们这个变量的出处(定义方式)。函数语法:$(origin VARIABLE) 函数功能:函数“origin”查询参数“VARIABLE ”(一个变量名)的出处。函数说明:“VARIABLE ”是一个变量名而不是一个变量的引用。因此通常它不包含“$”(当然,计算的变量名例外)。¾ 返回值:返回“VARIABLE ”的定义方式。用字符串表示。
函数的返回情况有以下几种:
1. undefined
变量“VARIABLE ”没有被定义。
2. default
变量“VARIABLE ”是一个默认定义(内嵌变量)。”、“MAKE ”、“RM”等变量。如果在Makefile中重新定义这些变量,函数返回值将相应发生变化。
3. environment
变量“VARIABLE ”是一个系统环境变量,并且make没有使用命令行选项“-e ”(Makefile中不存在同名的变量定义,此变量没有被替代)。
4. environment override
变量“VARIABLE ”是一个系统环境变量,并且make使用了命令行选项“-e ”。Makefile中存在一个同名的变量定义,使用“make -e ”时环境变量值替代了文件中的变量定义。 5. file
变量“VARIABLE ”在某一个makefile 文件中定义。
6. command line
变量“VARIABLE ”在命令行中定义。
7. override
变量“VARIABLE ”在makefile 文件中定义并使用“override ”指示符声明。
8. automatic
变量“VARIABLE ”是自动化变量
。
如果通过环境变量定义了$(BUILD_DIR),$(BUILD_DIR)不为空,执行“save-output:= $(BUILD_DIR),接着利用shell命令判断$(BUILD_DIR)路径是否存在,不存在则mkdir创建此目录Makefile里$(shell …..)表示利用当前shell程序执行括号里的内容。“[判断条件]||执行命令”若“判断条件为假,则执行”执行命令“
。接着判断$(BUILD_DIR)路径是否成功创建,不成功则标准错误输出“directory “$(saved-output)” does not exist”
## 接着是定义一连串目录变量:OBJTREE,SRCTREE,TOPD
Uboot Makefile 分析 来自淘豆网m.daumloan.com转载请标明出处.