Chinaunix首页 | 论坛 | 博客
  • 博客访问: 520276
  • 博文数量: 174
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 1827
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-15 14:12
文章分类

全部博文(174)

文章存档

2018年(1)

2017年(1)

2013年(3)

2012年(9)

2010年(12)

2009年(5)

2008年(106)

2007年(37)

我的朋友

分类: LINUX

2007-10-24 20:56:14

#
# 这个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函数的返回值是,如果为真(非空字符串),那个;会是整个函数的返回值,如果;为假(空字符串),那么
# ;会是整个函数的返回值,此时如果< else-part>;没有被定义,那么,整个函数返回空字串。
# 所以,;和;只会有一个被计算。
###################################################################################################################

# 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)


# "$@"表示所有的目标的挨个值,"$<"表示了所有依赖目标的挨个值
# objcopy拷贝源目标文件,并把它转换为相应的格式,格式由命令选项控制
# -O 指定生成的文件格式
# -O ihex
# -O srec 用来生成S记录文件
# -O binary 用来生成原始二进制文件

$(obj)u-boot.hex:    $(obj)u-boot
        $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@

$(obj)u-boot.srec:    $(obj)u-boot
        $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@

$(obj)u-boot.bin:    $(obj)u-boot
        $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@

#
$(obj)u-boot.img:    $(obj)u-boot.bin
        ./tools/mkimage -A $(ARCH) -T firmware -C none \
        -a $(TEXT_BASE) -e 0 \
        -n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | \
            sed -e 's/"[     ]*$$/ for $(BOARD) board"/') \
        -d $< $@

$(obj)u-boot.sha1:    $(obj)u-boot.bin
        $(obj)tools/ubsha1 $(obj)u-boot.bin

# objdump display information from object files
# -d 显示机器指令的汇编代码
$(obj)u-boot.dis:    $(obj)u-boot
        $(OBJDUMP) -d $< > $@

$(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) $< | \
        grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
        sort > $(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

#########################################################################
阅读(1235) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~