uboot移植——顶层Makefile详细分析

VERSION = 2010 PATCHLEVEL = 12 SUBLEVEL = EXTRAVERSION = ifneq \

U_BOOT_VERSION =$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) else

U_BOOT_VERSION =$(VERSION).$(PATCHLEVEL)$(EXTRAVERSION) Endif

U_BOOT_VERSION = 2010.12

TIMESTAMP_FILE =$(obj)include/timestamp_autogenerated.h 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/ppc64/powerpc/ \\ -e s/ppc/powerpc/ \\ -e s/macppc/powerpc/\\

-e s/sh.*/sh/)

$(shell uname -m)表示执行uname –m的shell命令,他执行的结果是取出机器硬件名(这台机器是64位的,所以其得到的结果就是x86-84)。sed –e s/abc/def 的意思是寻找结果里面是否有’abc’字样,如果有,就用?def?字样将其代替。

所以整条语句的意思就是,取出uname –m的结果,并在其中寻找是否有i.86字样,如果有就用i386代替,是否有arm.*(*是通配符),如果有,就用arm代替……,本台机的结果是x86-64所以还保持原样,没有用其他字符替换,所以HOSTARCH=x86-64 HOSTOS := $(shell uname -s | tr'[:upper:]' '[:lower:]' | \\ sed -e 's/cygwin.*/(cygwin/')

uname –s 表示取出本机操作系统内核名称,(这台机器是Linux),tr ‘*:upper:+’’*:lower:+’表示将结果里面的大写字符全部换成小写字符,sed –e‘s/Cygwin.*/Cygwin/’表示寻找结果里面是否有cygwin.*字符,如果有就用cygwin替换

所以整句话的结果就是HOSTOS = linux(注意第一个字母L被换成了小写l)

SHELL := $(shell if [ -x \BASH\$$BASH; \\ else if [-x /bin/bash];then echo /bin/bash;\\ else echosh;fi;fi

SHELL if[-x filename] 表示如果这个filename文件是可执行的,则为真,显然BASH变量是空的,则SHELL= /bin/bash 就是说shell命令的路径位于/bin/bash目录下

export HOSTARCH HOSTOS SHELL 表示将这些变量导出,供别的文件使用

ifeq (,$(findstring s,$(MAKEFLAGS))) XECHO = echo else XECHO = : Endif

If$( findstring string,text )表示从text中寻找string字样,如果找到了则返回text,如果没找到就返回空,显然MAKEFLAGS为空,所以 $(findstring s,$(MAKEFLAGS)) 返回为空,if语句为真,XECHO =echo,执行非静默编译,否则,执行静默编译(静默编译的意思就是在编译时控制台不打印任何信息) ifdef O

ifeq (\ BUILD_DIR := $(O) endif endif

这句话表示如果在编译的命令里面加入参数O(如 make O=/tmp).,就把O后面所指定的值赋给变量BUILD_DIR,(BUILD_DIR表示uboot的编译路径) ifneq ($(BUILD_DIR),) saved-output := $(BUILD_DIR)

如果BUILD_DIR不为空,则将BUILD_DIR的值赋给saved-output $(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR})

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4