一、uboot主Makefile分析
VERSION = 1
PATCHLEVEL = 3
SUBLEVEL = 4
EXTRAVERSION =
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
VERSION_FILE = $(obj)include/version_autogenerated.h
HOSTARCH := $(shell uname -m | \
sed -e s/i.86/i386/ \
-e s/sun4u/sparc64/ \
-e s/arm.*/arm/ \
-e s/sa110/arm/ \
-e s/powerpc/ppc/ \
-e s/ppc64/ppc/ \
-e s/macppc/ppc/)
HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
sed -e 's/\(cygwin\).*/cygwin/')
export HOSTARCH HOSTOS
这是uboot的Makefile的24~43行。
1、uboot的版本号分3个级别:
VERSION:主板本号
PATCHLEVEL:次版本号
SUBLEVEL:再次版本号
EXTRAVERSION:另外附加的版本信息
这4个用.分隔开共同构成了最终的版本号
2、Makefile中版本号最终生成了一个变量U_BOOT_VERSION,这个变量记录了Makefile中配置的版本号。
3、 include/version_autogenerated.h文件是编译过程中自动生成的一个文件,所以源目录中没有,但是编
译过后的uboot中就有了。它里面的内容是一个宏定义,宏定义的值内容就是我们在Makefile中配置的
uboot的版本号。
4、HOSTARCH和HOSTOS
(1)、直接在shell中执行uname -m得到i686,得到的值其实你当前执行这个命令的电脑的CPU的版本号。
(2)、shell中的|叫做管道,管道的作用就是把管道前面一个运算式的输出作为后一个表达式的输入。
(3)、HOSTARCH这个名字:HOST是主机,就是当前在做开发用的这台电脑。ARCH是architecture
(架构)的缩写,表示CPU的架构。所以HOSTARCH就是表示主机的CPU的架构。
(4)、这两个环境变量是主机的操作系统和主机的CPU架构,得出后保存备用,后面自然会用到。
*****************************************************************************************************
ifeq (,$(findstring s,$(MAKEFLAGS)))
XECHO = echo
else
XECHO = :
endif
这个Makefile中的50~54行(关于静默编译)
1、平时默认编译时命令行会打印出很多编译信息。但是有时候我们不希望看到这些编译信息,所以后台
编译即可。这就叫静默编译。
2、使用方法就是make -s ,-s会单独作为MAKEFLAGS传给Makefile,在50-54行这段代码的作用下XECHO
会变为空(默认等于echo),实现了静默编译。
**********************************************************************************************************
ifdef O
ifeq ("$(origin O)", "command line")
BUILD_DIR := $(O)
endif
endif
ifneq ($(BUILD_DIR),)
saved-output := $(BUILD_DIR)
# Attempt to create a output directory.
$(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR})
# Verify if it was successful.
BUILD_DIR := $(shell cd $(BUI