免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1258 | 回复: 0
打印 上一主题 下一主题

U-boot-13.0-rc3 Makefile for Top-level 分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-24 20:56 |只看该作者 |倒序浏览

                                #
# 这个Makefile文件是位于uboot顶层目录的Makefile文件,并且删除掉了与ARM不相关的代码
#
# 设置版本信息
VERSION = 1
PATCHLEVEL = 3
SUBLEVEL = 0
EXTRAVERSION = -rc3
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
VERSION_FILE = $(obj)include/version_autogenerated.h
#########################################################################################################
# 八、shell函数
# shell函数也不像其它的函数。顾名思义,它的参数应该就是操作系统Shell的命令。它和反引号“`”是相同的功能。这就是说,shell函数把执行操作系统命令后的输# 出作为函数返回。于是,我们可以用操作系统命令以及字符串处理命令awk,sed等等命令来生成一个变量,如:
#    contents := $(shell cat foo)
#    files := $(shell echo *.c)
# 注意,这个函数会新生成一个Shell程序来执行命令,所以你要注意其运行性能,如果你的Makefile中有一些比较复杂的规则,并大量使用了这个函数,那么对于你的系# 统性能是有害的。特别是Makefile的隐晦的规则可能会让你的shell函数执行的次数比你想像的多得多。
#########################################################################################################
#设置主机CPU类型
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
# Deal with colliding definitions from tcsh etc.
VENDOR=
#########################################################################
#
# U-boot build supports producing a object files to the separate external
# directory. Two use cases are supported:
#
# 1) Add O= to the make command line
# 'make O=/tmp/build all'
#
# 2) Set environement variable BUILD_DIR to point to the desired location
# 'export BUILD_DIR=/tmp/build'
# 'make'
#
# The second approach can also be used with a MAKEALL script
# 'export BUILD_DIR=/tmp/build'
# './MAKEALL'
#
# Command line 'O=' setting overrides BUILD_DIR environent variable.
#
# When none of the above methods is used the local build is performed and
# the object files are placed in the source directory.
#
#######################################################################################
# 七、origin函数
# origin函数不像其它的函数,他并不操作变量的值,他只是告诉你你的这个变量是哪里来的?其语法是:
#    $(origin ;)
# 注意,;是变量的名字,不应该是引用。所以你最好不要在;中使用“$”字符。Origin函数会以其返回值来告诉你这个变量的“出生情况”,下# 面,是origin函数的返回值:
#  “undefined”
#      如果;从来没有定义过,origin函数返回这个值“undefined”。
#  “default”
#      如果;是一个默认的定义,比如“CC”这个变量,这种变量我们将在后面讲述。
#  “environment”
#      如果;是一个环境变量,并且当Makefile被执行时,“-e”参数没有被打开。
#  “file”
#      如果;这个变量被定义在Makefile中。
#  “command line”
#      如果;这个变量是被命令行定义的。
#  “override”
#      如果;是被override指示符重新定义的。
#  “automatic”
#      如果;是一个命令运行中的自动化变量。关于自动化变量将在后面讲述。
# 这些信息对于我们编写Makefile是非常有用的,例如,假设我们有一个Makefile其包了一个定义文件Make.def,在 Make.def中定义了一个变量“bletch”,而我# 们的环境中也有一个环境变量“bletch”,此时,我们想判断一下,如果变量来源于环境,那么我们就把之重定义了,如果来源于Make.def或是命令行等非环境的,那# 么我们就不重新定义它。于是,在我们的Makefile中,我们可以这样写:
#    ifdef bletch
#    ifeq "$(origin bletch)" "environment"
#    bletch = barf, gag, etc.
#    endif
#    endif
#   当然,你也许会说,使用override关键字不就可以重新定义环境中的变量了吗?为什么需要使用这样的步骤?是的,我们用override是可以达到这样的效果,可是  #  override过于粗暴,它同时会把从命令行定义的变量也覆盖了,而我们只想重新定义环境传来的,而不想重新定义命令行传来的。
###########################################################################################################
##############################################################################################################
#   ifdef用法
#    ifdef ;
#   如果变量;的值非空,那到表达式为真。否则,表达式为假。当然,;同样可以是一个函数的返回值。注意,ifdef只是测试一# 个变量是否有值,其并不会把变量扩展到当前位置。还是来看两个例子:
#    示例一:
#    bar =
#    foo = $(bar)
#    ifdef foo
#    frobozz = yes
#    else
#    frobozz = no
#    endif
#
#    示例二:
#    foo =
#    ifdef foo
#    frobozz = yes
#    else
#    frobozz = no
#    endif
#  第一个例子中,“$(frobozz)”值是“yes”,第二个则是“no”。
################################################################################################################
ifdef O
ifeq ("$(origin O)", "command line")
BUILD_DIR := $(O)
endif
endif
###############################################################################################################
#    ifeq (;, ;)
#    ifeq ';' ';'
#    ifeq ";" ";"
#    ifeq ";" ';'
#    ifeq ';' ";"
#
# 比较参数“arg1”和“arg2”的值是否相同
#    ifneq (;, ;)
#    ifneq ';' ';'
#    ifneq ";" ";"
#    ifneq ";" ';'
#    ifneq ';' ";"
#
# 其比较参数“arg1”和“arg2”的值是否相同,如果不同,则为真
###############################################################################################################
ifneq ($(BUILD_DIR),)
saved-output := $(BUILD_DIR)
# Attempt to create a output directory.
# 若不存在目录的话就建立该目录包括它的你目录
$(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR})
################################################################################################################
# 五、if 函数
# if函数很像GNU的make所支持的条件语句——ifeq(参见前面所述的章节),if函数的语法是:
#    $(if ;,;)
# 或是
#    $(if ;,;,;)
# 可见,if函数可以包含“else”部分,或是不含。即if函数的参数可以是两个,也可以是三个。参数是 if的表达式,如果其返回的为非空字符串,那么 # 这个表达式就相当于返回真,于是,会被计算,否则;会被计算。
# 而if函数的返回值是,如果为真(非空字符串),那个;会是整个函数的返回值,如果;为假(空字符串),那么
# ;会是整个函数的返回值,此时如果;没有被定义,那么,整个函数返回空字串。
# 所以,;和;只会有一个被计算。
###################################################################################################################
# Verify if it was successful.
BUILD_DIR := $(shell cd $(BUILD_DIR) && /bin/pwd)
######################################################################################################################
#
#   $(error ;)
#    产生一个致命的错误,;是错误信息。注意,error函数不会在一被使用就会产生错误信息,所以如果你把其定义在某个变量中,并在后续的脚本中使用这#  个变量,那么也是可以的。例如:
#    示例一:
#
#    ifdef ERROR_001
#    $(error error is $(ERROR_001))
#    endif
#    示例二:
#
#    ERR = $(error found an error!)
#    .PHONY: err
#   err: ; $(ERR)
#
#    示例一会在变量ERROR_001定义了后执行时产生error调用,而示例二则在目录err被执行时才发生error调用。
###################################################################################################################
#如果$(BUILD_DIR)为空,则返回空,否则打印出错误信息
$(if $(BUILD_DIR),,$(error output directory "$(saved-output)" does not exist))
endif # ifneq ($(BUILD_DIR),)
#如果 $(BUILD_DIR) 非空,则 OBJTREE := $(BUILD_DIR) ,否则 OBJTREE := $(CURDIR)
OBJTREE    := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
SRCTREE    := $(CURDIR)
TOPDIR        := $(SRCTREE)
LNDIR        := $(OBJTREE)
export    TOPDIR SRCTREE OBJTREE
MKCONFIG    := $(SRCTREE)/mkconfig
export MKCONFIG
ifneq ($(OBJTREE),$(SRCTREE))
REMOTE_BUILD    := 1
export REMOTE_BUILD
endif
# $(obj) and (src) are defined in config.mk but here in main Makefile
# we also need them before config.mk is included which is the case for
# some targets like unconfig, clean, clobber, distclean, etc.
ifneq ($(OBJTREE),$(SRCTREE))
obj := $(OBJTREE)/
src := $(SRCTREE)/
else
obj :=
src :=
endif
export obj src
#########################################################################
# 关键字wildcard用于展开通配符,在这里好像不起什么作用,它的一个例子如:
# OBJ :=$(wildcard *.o)
# 要注意它与 OBJ :=*.o的区别
#########################################################################
ifeq ($(OBJTREE)/include/config.mk,$(wildcard $(OBJTREE)/include/config.mk))
# load ARCH, BOARD, and CPU configuration
include $(OBJTREE)/include/config.mk
export    ARCH CPU BOARD VENDOR SOC
##################################################################################################################
#     ifndef用法
#    ifndef ;
#  这个我就不多说了,和“ifdef”是相反的意思。
#        在;这一行上,多余的空格是被允许的,但是不能以[Tab]键做为开始(不然就被认为是命令)。而注释符“#”同样也是安全#  #  的。“else”和“endif”也一样,只要不是以[Tab]键开始就行了。
# 特别注意的是,make是在读取Makefile时就计算条件表达式的值,并根据条件表达式的值来选择语句,所以,你最好不要把自动化变量(如“$@”等)放入条件表达式# 中,因为自动化变量是在运行时才有的。
# 而且,为了避免混乱,make不允许把整个条件语句分成两部分放在不同的文件中。
###############################################################################################################
# 根据CPU类型来为交叉编译工具加上相应的前缀
ifndef CROSS_COMPILE
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE =
else
ifeq ($(ARCH),ppc)
CROSS_COMPILE = ppc_8xx-
endif
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
endif
ifeq ($(ARCH),i386)
CROSS_COMPILE = i386-linux-
endif
ifeq ($(ARCH),mips)
CROSS_COMPILE = mips_4KC-
endif
ifeq ($(ARCH),nios)
CROSS_COMPILE = nios-elf-
endif
ifeq ($(ARCH),nios2)
CROSS_COMPILE = nios2-elf-
endif
ifeq ($(ARCH),m68k)
CROSS_COMPILE = m68k-elf-
endif
ifeq ($(ARCH),microblaze)
CROSS_COMPILE = mb-
endif
ifeq ($(ARCH),blackfin)
CROSS_COMPILE = bfin-uclinux-
endif
ifeq ($(ARCH),avr32)
CROSS_COMPILE = avr32-linux-
endif
endif
endif
export    CROSS_COMPILE
# load other configuration
include $(TOPDIR)/config.mk
#########################################################################
# U-Boot objects....order is important (i.e. start must be first)
# OBJS变量的赋值,用于标识所有的.o文件(目标文件)
OBJS  = cpu/$(CPU)/start.o
ifeq ($(CPU),i386)
OBJS += cpu/$(CPU)/start16.o
OBJS += cpu/$(CPU)/reset.o
endif
ifeq ($(CPU),ppc4xx)
OBJS += cpu/$(CPU)/resetvec.o
endif
ifeq ($(CPU),mpc85xx)
OBJS += cpu/$(CPU)/resetvec.o
endif
ifeq ($(CPU),bf533)
OBJS += cpu/$(CPU)/start1.o    cpu/$(CPU)/interrupt.o    cpu/$(CPU)/cache.o
OBJS += cpu/$(CPU)/flush.o    cpu/$(CPU)/init_sdram.o
endif
ifeq ($(CPU),bf537)
OBJS += cpu/$(CPU)/start1.o    cpu/$(CPU)/interrupt.o    cpu/$(CPU)/cache.o
OBJS += cpu/$(CPU)/flush.o    cpu/$(CPU)/init_sdram.o
endif
ifeq ($(CPU),bf561)
OBJS += cpu/$(CPU)/start1.o    cpu/$(CPU)/interrupt.o    cpu/$(CPU)/cache.o
OBJS += cpu/$(CPU)/flush.o     cpu/$(CPU)/init_sdram.o
endif
OBJS := $(addprefix $(obj),$(OBJS))
# LIBS变量的赋值,用于标识所有的.a文件(库文件)
LIBS  = lib_generic/libgeneric.a
LIBS += $(shell if [ -f board/$(VENDOR)/common/Makefile ]; then echo \
    "board/$(VENDOR)/common/lib$(VENDOR).a"; fi)
LIBS += board/$(BOARDDIR)/lib$(BOARD).a
LIBS += cpu/$(CPU)/lib$(CPU).a
ifdef SOC
LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a
endif
ifeq ($(CPU),ixp)
LIBS += cpu/ixp/npe/libnpe.a
endif
LIBS += lib_$(ARCH)/lib$(ARCH).a
LIBS += fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a \
    fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a
LIBS += net/libnet.a
LIBS += disk/libdisk.a
LIBS += rtc/librtc.a
LIBS += dtt/libdtt.a
LIBS += drivers/libdrivers.a
LIBS += drivers/bios_emulator/libatibiosemu.a
LIBS += drivers/nand/libnand.a
LIBS += drivers/nand_legacy/libnand_legacy.a
LIBS += drivers/onenand/libonenand.a
LIBS += drivers/net/libnet.a
ifeq ($(CPU),mpc83xx)
LIBS += drivers/qe/qe.a
endif
ifeq ($(CPU),mpc85xx)
LIBS += drivers/qe/qe.a
endif
LIBS += drivers/serial/libserial.a
LIBS += drivers/sk98lin/libsk98lin.a
LIBS += post/libpost.a post/drivers/libpostdrivers.a
LIBS += $(shell if [ -d post/lib_$(ARCH) ]; then echo \
    "post/lib_$(ARCH)/libpost$(ARCH).a"; fi)
LIBS += $(shell if [ -d post/lib_$(ARCH)/fpu ]; then echo \
    "post/lib_$(ARCH)/fpu/libpost$(ARCH)fpu.a"; fi)
LIBS += $(shell if [ -d post/cpu/$(CPU) ]; then echo \
    "post/cpu/$(CPU)/libpost$(CPU).a"; fi)
LIBS += $(shell if [ -d post/board/$(BOARDDIR) ]; then echo \
    "post/board/$(BOARDDIR)/libpost$(BOARD).a"; fi)
LIBS += common/libcommon.a
LIBS += libfdt/libfdt.a
LIBS := $(addprefix $(obj),$(LIBS))
.PHONY : $(LIBS)
# Add GCC lib
# -L指定库搜索路径,-l指定需要链接的库libgcc.a或者是libgcc.so
PLATFORM_LIBS += -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc
# The "tools" are needed early, so put this first
# Don't include stuff already done in $(LIBS)
SUBDIRS    = tools \
      examples
.PHONY : $(SUBDIRS)
ifeq ($(CONFIG_NAND_U_BOOT),y)
NAND_SPL = nand_spl
U_BOOT_NAND = $(obj)u-boot-nand.bin
endif
######################################################################################
#
# $(subst ;,;,;)
#
#    名称:字符串替换函数——subst。
#    功能:把字串;中的;字符串替换成;。
#    返回:函数返回被替换过后的字符串。
#
#    示例:
#   
#        $(subst ee,EE,feet on the street),
#        把“feet on the street”中的“ee”替换成“EE”,返回结果是“fEEt on the strEEt”。
############################################################################################
__OBJS := $(subst $(obj),,$(OBJS))
__LIBS := $(subst $(obj),,$(LIBS))
#########################################################################
#########################################################################
# ALL为生成的目标文件
ALL += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)
# 伪定义用于生成$(ALL)指定的文件
all:        $(ALL)
# "$@"表示所有的目标的挨个值,"$ $@
$(obj)u-boot:        depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)
        UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed  -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
        cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
            --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
            -Map u-boot.map -o u-boot
#########################################################################################################
# $(notdir ;)
#
#    名称:取文件函数——notdir。
#    功能:从文件名序列;中取出非目录部分。非目录部分是指最后一个反斜杠(“/”)之后的部分。
#    返回:返回文件名序列;的非目录部分。
#    示例: $(notdir src/foo.c hacks)返回值是“foo.c hacks”。
########################################################################################################
$(OBJS):
        $(MAKE) -C cpu/$(CPU) $(if $(REMOTE_BUILD),$@,$(notdir $@))
$(LIBS):
        $(MAKE) -C $(dir $(subst $(obj),,$@))
$(SUBDIRS):
        $(MAKE) -C $@ all
$(NAND_SPL):    version
        $(MAKE) -C nand_spl/board/$(BOARDDIR) all
$(U_BOOT_NAND):    $(NAND_SPL) $(obj)u-boot.bin
        cat $(obj)nand_spl/u-boot-spl-16k.bin $(obj)u-boot.bin > $(obj)u-boot-nand.bin
#################################################################################################################
# 一、显示命令
#
# 通常,make会把其要执行的命令行在命令执行前输出到屏幕上。当我们用“@”字符在命令行前,那么,这个命令将不被make显示出来,最具代表性的例子是,我们用这个# 功能来像屏幕显示一些信息。如:
#
#    @echo 正在编译XXX模块......
#
# 当make执行时,会输出“正在编译XXX模块......”字串,但不会输出命令,如果没有“@”,那么,make将输出:
#
#    echo 正在编译XXX模块......
#    正在编译XXX模块......
#
# 如果make执行时,带入make参数“-n”或“--just-print”,那么其只是显示命令,但不会执行命令,这个功能很有利于我们调试我们的Makefile,看看我们书写的# 命令是执行起来是什么样子的或是什么顺序的。
#
# 而make参数“-s”或“--slient”则是全面禁止命令的显示。
####################################################################################################################
version:
        @echo -n "#define U_BOOT_VERSION \"U-Boot " > $(VERSION_FILE); \
        echo -n "$(U_BOOT_VERSION)" >> $(VERSION_FILE); \
        echo -n $(shell $(CONFIG_SHELL) $(TOPDIR)/tools/setlocalversion \
             $(TOPDIR)) >> $(VERSION_FILE); \
        echo "\"" >> $(VERSION_FILE)
gdbtools:
        $(MAKE) -C tools/gdb all || exit 1
updater:
        $(MAKE) -C tools/updater all || exit 1
env:
        $(MAKE) -C tools/env all || exit 1
depend dep:    version
        for dir in $(SUBDIRS) ; do $(MAKE) -C $$dir _depend ; done
tags ctags:
        ctags -w -o $(OBJTREE)/ctags `find $(SUBDIRS) include \
                lib_generic board/$(BOARDDIR) cpu/$(CPU) lib_$(ARCH) \
                fs/cramfs fs/fat fs/fdos fs/jffs2 \
                net disk rtc dtt drivers drivers/sk98lin common \
            \( -name CVS -prune \) -o \( -name '*.[ch]' -print \)`
etags:
        etags -a -o $(OBJTREE)/etags `find $(SUBDIRS) include \
                lib_generic board/$(BOARDDIR) cpu/$(CPU) lib_$(ARCH) \
                fs/cramfs fs/fat fs/fdos fs/jffs2 \
                net disk rtc dtt drivers drivers/sk98lin common \
            \( -name CVS -prune \) -o \( -name '*.[ch]' -print \)`
$(obj)System.map:    $(obj)u-boot
        @$(NM) $ $(obj)System.map
#########################################################################
else
all $(obj)u-boot.hex $(obj)u-boot.srec $(obj)u-boot.bin \
$(obj)u-boot.img $(obj)u-boot.dis $(obj)u-boot \
$(SUBDIRS) version gdbtools updater env depend \
dep tags ctags etags $(obj)System.map:
    @echo "System not configured - see README" >&2
    @ exit 1
endif
.PHONY : CHANGELOG
CHANGELOG:
    git log --no-merges U-Boot-1_1_5.. | \
    unexpand -a | sed -e 's/\s\s*$$//' > $@
#########################################################################
# 每次进行重新配置的时候都要执行下面的这段代码, 用于清除上个工程留下的文件
unconfig:
    @rm -f $(obj)include/config.h $(obj)include/config.mk \
        $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp
# ARM
#========================================================================
#########################################################################
## StrongARM Systems
#########################################################################
assabet_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm sa1100 assabet
dnp1110_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm sa1100 dnp1110
gcplus_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm sa1100 gcplus
lart_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm sa1100 lart
shannon_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm sa1100 shannon
#########################################################################
## ARM92xT Systems
#########################################################################
xtract_trab = $(subst _bigram,,$(subst _bigflash,,$(subst _old,,$(subst _config,,$1))))
xtract_omap1610xxx = $(subst _cs0boot,,$(subst _cs3boot,,$(subst _cs_autoboot,,$(subst _config,,$1))))
xtract_omap730p2 = $(subst _cs0boot,,$(subst _cs3boot,, $(subst _config,,$1)))
at91rm9200dk_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t at91rm9200dk NULL at91rm9200
cmc_pu2_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t cmc_pu2 NULL at91rm9200
csb637_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t csb637 NULL at91rm9200
mp2usb_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t mp2usb NULL at91rm9200
########################################################################
## ARM Integrator boards - see doc/README-integrator for more info.
integratorap_config    \
ap_config        \
ap966_config        \
ap922_config        \
ap922_XA10_config    \
ap7_config        \
ap720t_config        \
ap920t_config        \
ap926ejs_config        \
ap946es_config: unconfig
    @board/integratorap/split_by_variant.sh $@
integratorcp_config    \
cp_config        \
cp920t_config        \
cp926ejs_config        \
cp946es_config        \
cp1136_config        \
cp966_config        \
cp922_config        \
cp922_XA10_config    \
cp1026_config: unconfig
    @board/integratorcp/split_by_variant.sh $@
kb9202_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t kb9202 NULL at91rm9200
lpd7a400_config \
lpd7a404_config:    unconfig
    @$(MKCONFIG) $(@:_config=) arm lh7a40x lpd7a40x
mx1ads_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t mx1ads NULL imx
mx1fs2_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t mx1fs2 NULL imx
netstar_32_config    \
netstar_config:        unconfig
    @mkdir -p $(obj)include
    @if [ "$(findstring _32_,$@)" ] ; then \
        echo "... 32MB SDRAM" ; \
        echo "#define PHYS_SDRAM_1_SIZE SZ_32M" >>$(obj)include/config.h ; \
    else \
        echo "... 64MB SDRAM" ; \
        echo "#define PHYS_SDRAM_1_SIZE SZ_64M" >>$(obj)include/config.h ; \
    fi
    @$(MKCONFIG) -a netstar arm arm925t netstar
omap1510inn_config :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm925t omap1510inn
omap5912osk_config :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm926ejs omap5912osk NULL omap
davinci_dvevm_config :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm926ejs dv-evm davinci davinci
davinci_schmoogie_config :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm926ejs schmoogie davinci davinci
davinci_sonata_config :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm926ejs sonata davinci davinci
omap1610inn_config \
omap1610inn_cs0boot_config \
omap1610inn_cs3boot_config \
omap1610inn_cs_autoboot_config \
omap1610h2_config \
omap1610h2_cs0boot_config \
omap1610h2_cs3boot_config \
omap1610h2_cs_autoboot_config:    unconfig
    @mkdir -p $(obj)include
    @if [ "$(findstring _cs0boot_, $@)" ] ; then \
        echo "#define CONFIG_CS0_BOOT" >> .$(obj)include/config.h ; \
        echo "... configured for CS0 boot"; \
    elif [ "$(findstring _cs_autoboot_, $@)" ] ; then \
        echo "#define CONFIG_CS_AUTOBOOT" >> $(obj)include/config.h ; \
        echo "... configured for CS_AUTO boot"; \
    else \
        echo "#define CONFIG_CS3_BOOT" >> $(obj)include/config.h ; \
        echo "... configured for CS3 boot"; \
    fi;
    @$(MKCONFIG) -a $(call xtract_omap1610xxx,$@) arm arm926ejs omap1610inn NULL omap
omap730p2_config \
omap730p2_cs0boot_config \
omap730p2_cs3boot_config :    unconfig
    @mkdir -p $(obj)include
    @if [ "$(findstring _cs0boot_, $@)" ] ; then \
        echo "#define CONFIG_CS0_BOOT" >> $(obj)include/config.h ; \
        echo "... configured for CS0 boot"; \
    else \
        echo "#define CONFIG_CS3_BOOT" >> $(obj)include/config.h ; \
        echo "... configured for CS3 boot"; \
    fi;
    @$(MKCONFIG) -a $(call xtract_omap730p2,$@) arm arm926ejs omap730p2 NULL omap
sbc2410x_config: unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t sbc2410x NULL s3c24x0
scb9328_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t scb9328 NULL imx
smdk2400_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t smdk2400 NULL s3c24x0
smdk2410_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
SX1_config :        unconfig
    @$(MKCONFIG) $(@:_config=) arm arm925t sx1
# TRAB default configuration:    8 MB Flash, 32 MB RAM
trab_config \
trab_bigram_config \
trab_bigflash_config \
trab_old_config:    unconfig
    @mkdir -p $(obj)include
    @mkdir -p $(obj)board/trab
    @ >$(obj)include/config.h
    @[ -z "$(findstring _bigram,$@)" ] || \
        { echo "#define CONFIG_FLASH_8MB"  >>$(obj)include/config.h ; \
          echo "#define CONFIG_RAM_32MB"   >>$(obj)include/config.h ; \
          echo "... with 8 MB Flash, 32 MB RAM" ; \
        }
    @[ -z "$(findstring _bigflash,$@)" ] || \
        { echo "#define CONFIG_FLASH_16MB" >>$(obj)include/config.h ; \
          echo "#define CONFIG_RAM_16MB"   >>$(obj)include/config.h ; \
          echo "... with 16 MB Flash, 16 MB RAM" ; \
          echo "TEXT_BASE = 0x0CF40000" >$(obj)board/trab/config.tmp ; \
        }
    @[ -z "$(findstring _old,$@)" ] || \
        { echo "#define CONFIG_FLASH_8MB"  >>$(obj)include/config.h ; \
          echo "#define CONFIG_RAM_16MB"   >>$(obj)include/config.h ; \
          echo "... with 8 MB Flash, 16 MB RAM" ; \
          echo "TEXT_BASE = 0x0CF40000" >$(obj)board/trab/config.tmp ; \
        }
    @$(MKCONFIG) -a $(call xtract_trab,$@) arm arm920t trab NULL s3c24x0
VCMA9_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t vcma9 mpl s3c24x0
#========================================================================
# ARM supplied Versatile development boards
#========================================================================
versatile_config    \
versatileab_config    \
versatilepb_config :    unconfig
    @board/versatile/split_by_variant.sh $@
voiceblue_smallflash_config    \
voiceblue_config:    unconfig
    @mkdir -p $(obj)include
    @mkdir -p $(obj)board/voiceblue
    @if [ "$(findstring _smallflash_,$@)" ] ; then \
        echo "... boot from lower flash bank" ; \
        echo "#define VOICEBLUE_SMALL_FLASH" >>$(obj)include/config.h ; \
        echo "VOICEBLUE_SMALL_FLASH=y" >$(obj)board/voiceblue/config.tmp ; \
    else \
        echo "... boot from upper flash bank" ; \
        >$(obj)include/config.h ; \
        echo "VOICEBLUE_SMALL_FLASH=n" >$(obj)board/voiceblue/config.tmp ; \
    fi
    @$(MKCONFIG) -a voiceblue arm arm925t voiceblue
cm4008_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t cm4008 NULL ks8695
cm41xx_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t cm41xx NULL ks8695
gth2_config        :    unconfig
    @mkdir -p $(obj)include
    @ >$(obj)include/config.h
    @echo "#define CONFIG_GTH2 1" >>$(obj)include/config.h
    @$(MKCONFIG) -a gth2 mips mips gth2
#########################################################################
## S3C44B0 Systems
#########################################################################
B2_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm s3c44b0 B2 dave
#########################################################################
## ARM720T Systems
#########################################################################
armadillo_config:    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm720t armadillo
ep7312_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm720t ep7312
impa7_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm720t impa7
modnet50_config :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm720t modnet50
evb4510_config :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm720t evb4510
lpc2292sodimm_config:    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm720t lpc2292sodimm NULL lpc2292
SMN42_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm720t SMN42 siemens lpc2292
#########################################################################
## XScale Systems
#########################################################################
adsvix_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm pxa adsvix
cerf250_config :    unconfig
    @$(MKCONFIG) $(@:_config=) arm pxa cerf250
cradle_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm pxa cradle
csb226_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm pxa csb226
delta_config :
    @$(MKCONFIG) $(@:_config=) arm pxa delta
innokom_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm pxa innokom
ixdp425_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm ixp ixdp425
ixdpg425_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm ixp ixdp425
lubbock_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm pxa lubbock
pleb2_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm pxa pleb2
logodl_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm pxa logodl
pdnb3_config \
scpu_config:    unconfig
    @mkdir -p $(obj)include
    @if [ "$(findstring scpu_,$@)" ] ; then \
        echo "#define CONFIG_SCPU"      >>$(obj)include/config.h ; \
        echo "... on SCPU board variant" ; \
    else \
        >$(obj)include/config.h ; \
    fi
    @$(MKCONFIG) -a pdnb3 arm ixp pdnb3 prodrive
#########################################################################
# 等价于 $(MKCONFIG) pxa255_idp arm pxa pxa255_idp
# MKCONFIG    := $(SRCTREE)/mkconfig
#########################################################################
pxa255_idp_config:    unconfig
    @$(MKCONFIG) $(@:_config=) arm pxa pxa255_idp
trizepsiv_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm pxa trizepsiv
wepep250_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm pxa wepep250
xaeniax_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm pxa xaeniax
xm250_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm pxa xm250
xsengine_config :    unconfig
    @$(MKCONFIG) $(@:_config=) arm pxa xsengine
zylonite_config :
    @$(MKCONFIG) $(@:_config=) arm pxa zylonite
#########################################################################
## ARM1136 Systems
#########################################################################
omap2420h4_config :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm1136 omap2420h4
#========================================================================
# i386
#========================================================================
#########################################################################
## AMD SC520 CDP
#########################################################################
sc520_cdp_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) i386 i386 sc520_cdp
sc520_spunk_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) i386 i386 sc520_spunk
sc520_spunk_rel_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) i386 i386 sc520_spunk
#########################################################################
#########################################################################
#########################################################################
clean:
    find $(OBJTREE) -type f \
        \( -name 'core' -o -name '*.bak' -o -name '*~' \
        -o -name '*.o'  -o -name '*.a'  \) -print \
        | xargs rm -f
    rm -f $(obj)examples/hello_world $(obj)examples/timer \
          $(obj)examples/eepro100_eeprom $(obj)examples/sched \
          $(obj)examples/mem_to_mem_idma2intr $(obj)examples/82559_eeprom \
          $(obj)examples/smc91111_eeprom $(obj)examples/interrupt \
          $(obj)examples/test_burst
    rm -f $(obj)tools/img2srec $(obj)tools/mkimage $(obj)tools/envcrc \
        $(obj)tools/gen_eth_addr $(obj)tools/ubsha1
    rm -f $(obj)tools/mpc86x_clk $(obj)tools/ncb
    rm -f $(obj)tools/easylogo/easylogo $(obj)tools/bmp_logo
    rm -f $(obj)tools/gdb/astest $(obj)tools/gdb/gdbcont $(obj)tools/gdb/gdbsend
    rm -f $(obj)tools/env/fw_printenv $(obj)tools/env/fw_setenv
    rm -f $(obj)board/cray/L1/bootscript.c $(obj)board/cray/L1/bootscript.image
    rm -f $(obj)board/netstar/eeprom $(obj)board/netstar/crcek $(obj)board/netstar/crcit
    rm -f $(obj)board/netstar/*.srec $(obj)board/netstar/*.bin
    rm -f $(obj)board/trab/trab_fkt $(obj)board/voiceblue/eeprom
    rm -f $(obj)board/integratorap/u-boot.lds $(obj)board/integratorcp/u-boot.lds
    rm -f $(obj)board/bf533-ezkit/u-boot.lds $(obj)board/bf533-stamp/u-boot.lds
    rm -f $(obj)board/bf537-stamp/u-boot.lds $(obj)board/bf561-ezkit/u-boot.lds
    rm -f $(obj)include/bmp_logo.h
    rm -f $(obj)nand_spl/u-boot-spl $(obj)nand_spl/u-boot-spl.map
clobber:    clean
    find $(OBJTREE) -type f \( -name .depend \
        -o -name '*.srec' -o -name '*.bin' -o -name u-boot.img \) \
        -print0 \
        | xargs -0 rm -f
    rm -f $(OBJS) $(obj)*.bak $(obj)ctags $(obj)etags $(obj)TAGS $(obj)include/version_autogenerated.h
    rm -fr $(obj)*.*~
    rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL)
    rm -f $(obj)tools/crc32.c $(obj)tools/environment.c $(obj)tools/env/crc32.c $(obj)tools/sha1.c
    rm -f $(obj)tools/inca-swap-bytes $(obj)cpu/mpc824x/bedbug_603e.c
    rm -f $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm
    [ ! -d $(OBJTREE)/nand_spl ] || find $(obj)nand_spl -lname "*" -print | xargs rm -f
ifeq ($(OBJTREE),$(SRCTREE))
mrproper \
distclean:    clobber unconfig
else
mrproper \
distclean:    clobber unconfig
    rm -rf $(OBJTREE)/*
endif
backup:
    F=`basename $(TOPDIR)` ; cd .. ; \
    gtar --force-local -zcvf `date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F
#########################################################################
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/50916/showart_406896.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP