Makefile文件分析
#
#(C)Copyright2000-2010
#WolfgangDenk,DENXSoftwareEngineering,wd@denx.de.
#
#SeefileCREDITSforlistofpeoplewhocontributedtothis
#project.
#
#Thisprogramisfreesoftware;youcanredistributeitand/or
#modifyitunderthetermsoftheGNUGeneralPublicLicenseas
#publishedbytheFreeSoftwareFoundatio;eitherversion2of
#theLicense,or(atyouroption)anylaterversion.
#
#Thisprogramisdistributedinthehopethatitwillbeuseful,
#butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof
#MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE. Seethe
#GNUGeneralPublicLicenseformoredetails.
#
#YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense
#alongwiththisprogram;ifnot,writetotheFreeSoftware
#Foundation,Inc.,59TemplePlace,Suite330,Boston,
#MA02111-1307USA
#
VERSION=2010#主版本号
PATCHLEVEL=09#次版本号
SUBLEVEL=#修正版本号
EXTRAVERSION=#版本号扩展
ifneq"$(SUBLEVEL)"""
#***该u-boot的版本号为2010.09
U_BOOT_VERSION=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
else
U_BOOT_VERSION=$(VERSION).$(PATCHLEVEL)$(EXTRAVERSION)
endif
TIMESTAMP_FILE=$(obj)include/timestamp_autogenerated.h
VERSION_FILE=$(obj)include/version_autogenerated.h
#***uname-m得到i686,通过管道传送给sed命令
HOSTARCH:=$(shelluname-m|\
#***sed为替换命令,将i686替换为i386
sed-es/i.86/i386/\
-es/sun4u/sparc64/\
-es/arm.*/arm/\
-es/sa110/arm/\
-es/ppc64/powerpc/\
-es/ppc/powerpc/\
-es/macppc/powerpc/\
-es/sh.*/sh/)
#***查看平台的系统Linux通过tr命令转为linux,再由sed命令替换
HOSTOS:=$(shelluname-s|tr'[:upper:]''[:lower:]'|\
sed-e's/\(cygwin\).*/cygwin/')
#Setshelltobashifpossible,otherwisefallbacktosh
SHELL:=$(shellif[-x"$$BASH"];thenecho$$BASH;\
elseif[-x/bin/bash];thenecho/bin/bash;\
elseechosh;fi;fi)
#***变量交由下一层makefile使用
export HOSTARCHHOSTOSSHELL
#Dealwithcollidingdefinitionsfromtcshetc.
VENDOR=
#########################################################################
#Allowforsilentbuilds
ifeq(,$(findstrings,$(MAKEFLAGS)))
XECHO=echo
else
XECHO=:
endif
#########################################################################
#
#U-bootbuildsupportsproducingaobjectfilestotheseparateexternal
#directory.Twousecasesaresupported:
#u-boot支持将目标文件生成在外部文件夹中,以下两种命令可以实现
#1)AddO=tothemakecommandline
#1加入o=命令
#'makeO=/tmp/buildall'
#
#2)SetenvironementvariableBUILD_DIRtopointtothedesiredlocation
#2设置环境变量
#'exportBUILD_DIR=/tmp/build'
#'make'
#
#ThesecondapproachcanalsobeusedwithaMAKEALLscript
#'exportBUILD_DIR=/tmp/build'
#'./MAKEALL'
#
#Commandline'O='settingoverridesBUILD_DIRenvironentvariable.
#
#Whennoneoftheabovemethodsisusedthelocalbuildisperformedand
#theobjectfilesareplacedinthesourcedirectory.
#如果以上两种方式都没有定义,它将会存放在源码目录下
#***给build_dir赋值
ifdefO
ifeq("$(originO)","commandline")
BUILD_DIR:=$(O)
endif
endif
#***如果build_dir不为0,将其设为输出目录
ifneq($(BUILD_DIR),)
saved-output:=$(BUILD_DIR)
#Attempttocreateaoutputdirectory.
#***检查build_dir是不是一个目录,如果没有就创建
$(shell[-d${BUILD_DIR}]||mkdir-p${BUILD_DIR})
#Verifyifitwassuccessful.
#***检查build_dir目录是否创建成功
BUILD_DIR:=$(shellcd$(BUILD_DIR)&&/bin/pwd)
$(if$(BUILD_DIR),,$(erroroutputdirectory"$(saved-output)"doesnotexist))
endif#ifneq($(BUILD_DIR),)
OBJTREE :=$(if$(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
SRCTREE :=$(CURDIR)
#***源码所在目录
TOPDIR :=$(SRCTREE)
#***存放生成文件的目录
LNDIR :=$(OBJTREE)
#***供下一层makefile调用
export TOPDIRSRCTREEOBJTREE
#***定义MKCONFIG变量为mkconfig文件
MKCONFIG :=$(SRCTREE)/mkconfig
exportMKCONFIG
#***如果输出目录和源码目录不相等,设置REMOTE_BUILD标志位
ifneq($(OBJTREE),$(SRCTREE))
REMOTE_BUILD :=1
exportREMOTE_BUILD
endif
#$(obj)and(src)aredefinedinconfig.mkbuthereinmainMakefile
#wealsoneedthembeforeconfig.mkisincludedwhichisthecasefor
#sometargetslikeunconfig,clean,clobber,distclean,etc.
#***如果输出目录和源码目录不相同,对obj和src进行赋值,
#***两者会在config.mk文件中定义,如果在包含之前使用,
#***unconfig,clean,clobber,distclean
ifneq($(OBJTREE),$(SRCTREE))
obj:=$(OBJTREE)/
src:=$(SRCTREE)/
else
obj:=
src:=
endif
exportobjsrc
#MakesureCDPATHsettingsdon'tinterfere
unexportCDPATH
#########################################################################
#The"tools"areneededearly,soputthisfirst
#Don'tincludestuffalreadydonein$(LIBS)
SUBDIRS =tools\
examples/standalone\
examples/api
.PHONY:$(SUBDIRS)
ifeq($(obj)include/config.mk,$(wildcard$(obj)include/config.mk))
#Includeautoconf.mkbeforeconfig.mksothattheconfigoptionsareavailable
#toalltoplevelbuildfiles.Weneedthedummyall:targettopreventthe
#dependencytargetinautoconf.mk.depfrombeingthedefault.
all:
sinclude$(obj)include/autoconf.mk.dep
sinclude$(obj)include/autoconf.mk
#loadARCH,BOARD,andCPUconfiguration
#***包含include/config.mk文件
include$(obj)include/config.mk
#***以下几个变量供下一层makefile使用
export ARCHCPUBOARDVENDORSOC
#setdefaulttonothingfornativebuilds
#***指定交叉编译器前缀
ifeq($(HOSTARCH),$(ARCH))
CROSS_COMPILE?=
endif
CROSS_COMPILE=arm-arm1176jzfs-linux-gnueabi-
#loadotherconfiguration
#***导入配置文件(文件定义了交叉编译器/选项/编译规则)
include$(TOPDIR)/config.mk
#########################################################################
#U-Bootobjects....orderisimportant(i.e.startmustbefirst)
#***u-boot需要的目标文件和库文件
OBJS=$(CPUDIR)/start.o
ifeq($(CPU),i386)
OBJS+=$(CPUDIR)/start16.o
OBJS+=$(CPUDIR)/resetvec.o
endif
ifeq($(CPU),ppc4xx)
OBJS+=$(CPUDIR)/resetvec.o
endif
ifeq($(CPU),mpc85xx)
OBJS+=$(CPUDIR)/resetvec.o
endif
#***addprefix为增加前缀函数
OBJS:=$(addprefix$(obj),$(OBJS))
#***以下为库文件
LIBS=lib/libgeneric.a
LIBS+=lib/lzma/liblzma.a
LIBS+=lib/lzo/liblzo.a
LIBS+=$(shellif[-fboard/$(VENDOR)/common/Makefile];thenecho\
"board/$(VENDOR)/common/lib$(VENDOR).a";fi)
LIBS+=$(CPUDIR)/lib$(CPU).a
ifdefSOC
LIBS+=$(CPUDIR)/$(SOC)/lib$(SOC).a
endif
ifeq($(CPU),ixp)
LIBS+=arch/arm/cpu/ixp/npe/libnpe.a
endif
LIBS+=arch/$(ARCH)/lib/lib$(ARCH).a
LIBS+=fs/cramfs/libcramfs.afs/fat/libfat.afs/fdos/libfdos.afs/jffs2/libjffs2.a\
fs/reiserfs/libreiserfs.afs/ext2/libext2fs.afs/yaffs2/libyaffs2.a\
fs/ubifs/libubifs.a
LIBS+=net/libnet.a
LIBS+=disk/libdisk.a
LIBS+=drivers/bios_emulator/libatibiosemu.a
LIBS+=drivers/block/libblock.a
LIBS+=drivers/dma/libdma.a
LIBS+=drivers/fpga/libfpga.a
LIBS+=drivers/gpio/libgpio.a
LIBS+=drivers/hwmon/libhwmon.a
LIBS+=drivers/i2c/libi2c.a
LIBS+=drivers/input/libinput.a
LIBS+=drivers/misc/libmisc.a
LIBS+=drivers/mmc/libmmc.a
LIBS+=drivers/mtd/libmtd.a
LIBS+=drivers/mtd/nand/libnand.a
LIBS+=drivers/mtd/onenand/libonenand.a
LIBS+=drivers/mtd/ubi/libubi.a
LIBS+=drivers/mtd/spi/libspi_flash.a
LIBS+=drivers/net/libnet.a
LIBS+=drivers/net/phy/libphy.a
LIBS+=drivers/pci/libpci.a
LIBS+=drivers/pcmcia/libpcmcia.a
LIBS+=drivers/power/libpower.a
LIBS+=drivers/spi/libspi.a
ifeq($(CPU),mpc83xx)
LIBS+=drivers/qe/qe.a
LIBS+=arch/powerpc/cpu/mpc8xxx/lib8xxx.a
endif
ifeq($(CPU),mpc85xx)
LIBS+=drivers/qe/qe.a
LIBS+=arch/powerpc/cpu/mpc8xxx/ddr/libddr.a
LIBS+=arch/powerpc/cpu/mpc8xxx/lib8xxx.a
endif
ifeq($(CPU),mpc86xx)
LIBS+=arch/powerpc/cpu/mpc8xxx/ddr/libddr.a
LIBS+=arch/powerpc/cpu/mpc8xxx/lib8xxx.a
endif
LIBS+=drivers/rtc/librtc.a
LIBS+=drivers/serial/libserial.a
LIBS+=drivers/twserial/libtws.a
LIBS+=drivers/usb/gadget/libusb_gadget.a
LIBS+=drivers/usb/host/libusb_host.a
LIBS+=drivers/usb/musb/libusb_musb.a
LIBS+=drivers/usb/phy/libusb_phy.a
LIBS+=drivers/video/libvideo.a
LIBS+=drivers/watchdog/libwatchdog.a
LIBS+=common/libcommon.a
LIBS+=lib/libfdt/libfdt.a
LIBS+=api/libapi.a
LIBS+=post/libpost.a
ifeq($(SOC),omap3)
LIBS+=$(CPUDIR)/omap-common/libomap-common.a
endif
ifeq($(SOC),omap4)
LIBS+=$(CPUDIR)/omap-common/libomap-common.a
endif
ifeq($(SOC),s5pc1xx)
LIBS+=$(CPUDIR)/s5p-common/libs5p-common.a
endif
ifeq($(SOC),s5pc2xx)
LIBS+=$(CPUDIR)/s5p-common/libs5p-common.a
endif
LIBS:=$(addprefix$(obj),$(LIBS))
.PHONY:$(LIBS)$(TIMESTAMP_FILE)$(VERSION_FILE)
LIBBOARD=board/$(BOARDDIR)/lib$(BOARD).a
LIBBOARD:=$(addprefix$(obj),$(LIBBOARD))
#AddGCClib
#***加入GCC的库
ifdefUSE_PRIVATE_LIBGCC
ifeq("$(USE_PRIVATE_LIBGCC)","yes")
PLATFORM_LIBGCC=-L$(OBJTREE)/arch/$(ARCH)/lib-lgcc
else
PLATFORM_LIBGCC=-L$(USE_PRIVATE_LIBGCC)-lgcc
endif
else
PLATFORM_LIBGCC=-L$(shelldirname`$(CC)$(CFLAGS)-print-libgcc-file-name`)-lgcc
endif
PLATFORM_LIBS+=$(PLATFORM_LIBGCC)
exportPLATFORM_LIBS
#SpecialflagsforCPPwhenprocessingthelinkerscript.
#Passtheversiondownsowecanhandlebackwardscompatibility
#onthefly.
LDPPFLAGS+=\
-include$(TOPDIR)/include/u-boot/u-boot.lds.h\
$(shell$(LD)--version|\
sed-ne's/GNUldversion\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1-DLD_MINOR=\2/p')
ifeq($(CONFIG_NAND_U_BOOT),y)
NAND_SPL=nand_spl
U_BOOT_NAND=$(obj)u-boot-nand.bin
endif
ifeq($(CONFIG_ONENAND_U_BOOT),y)
ONENAND_IPL=onenand_ipl
U_BOOT_ONENAND=$(obj)u-boot-onenand.bin
ONENAND_BIN?=$(obj)onenand_ipl/onenand-ipl-2k.bin
endif
__OBJS:=$(subst$(obj),,$(OBJS))
__LIBS:=$(subst$(obj),,$(LIBS))$(subst$(obj),,$(LIBBOARD))
#########################################################################
#########################################################################
#***最终生成的境像文件
#AlwaysappendALLsothatarchconfig.mk'scanaddcustomones
ALL+=$(obj)u-boot.srec$(obj)u-boot.bin$(obj)System.map$(U_BOOT_NAND)$(U_BOOT_ONENAND)
all: $(ALL)
$(obj)u-boot.hex: $(obj)u-boot
$(OBJCOPY)${OBJCFLAGS}-Oihex$<$@
$(obj)u-boot.srec: $(obj)u-boot
$(OBJCOPY)-Osrec$<$@
$(obj)u-boot.bin: $(obj)u-boot
$(OBJCOPY)${OBJCFLAGS}-Obinary$<$@
$(obj)u-boot.ldr: $(obj)u-boot
$(CREATE_LDR_ENV)
$(LDR)-T$(CONFIG_BFIN_CPU)-c$@$<$(LDR_FLAGS)
$(obj)u-boot.ldr.hex: $(obj)u-boot.ldr
$(OBJCOPY)${OBJCFLAGS}-Oihex$<$@-Ibinary
$(obj)u-boot.ldr.srec: $(obj)u-boot.ldr
$(OBJCOPY)${OBJCFLAGS}-Osrec$<$@-Ibinary
$(obj)u-boot.img: $(obj)u-boot.bin
$(obj)tools/mkimage-A$(ARCH)-Tfirmware-Cnone\
-a$(TEXT_BASE)-e0\
-n$(shellsed-n-e's/.*U_BOOT_VERSION//p'$(VERSION_FILE)|\
sed-e's/"[ ]*$$/for$(BOARD)board"/')\
-d$<$@
$(obj)u-boot.imx:$(obj)u-boot.bin
$(obj)tools/mkimage-n$(IMX_CONFIG)-Timximage\
-e$(TEXT_BASE)-d$<$@
$(obj)u-boot.kwb:$(obj)u-boot.bin
$(obj)tools/mkimage-n$(KWD_CONFIG)-Tkwbimage\
-a$(TEXT_BASE)-e$(TEXT_BASE)-d$<$@
$(obj)u-boot.sha1: $(obj)u-boot.bin
$(obj)tools/ubsha1$(obj)u-boot.bin
$(obj)u-boot.dis: $(obj)u-boot
$(OBJDUMP)-d$<>$@
GEN_UBOOT=\
UNDEF_SYM=`$(OBJDUMP)-x$(LIBBOARD)$(LIBS)|\
sed-n-e's/.*\($(SYM_PREFIX)__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
cd$(LNDIR)&&$(LD)$(LDFLAGS)$$UNDEF_SYM$(__OBJS)\
--start-group$(__LIBS)--end-group$(PLATFORM_LIBS)\
-Mapu-boot.map-ou-boot
$(obj)u-boot: depend$(SUBDIRS)$(OBJS)$(LIBBOARD)$(LIBS)$(LDSCRIPT)$(obj)u-boot.lds
$(GEN_UBOOT)
ifeq($(CONFIG_KALLSYMS),y)
smap=`$(callSYSTEM_MAP,u-boot)|\
awk'$$2~/[tTwW]/{printf$$1$$3"\\\\000"}'`;\
$(CC)$(CFLAGS)-DSYSTEM_MAP="\"$${smap}\""\
-ccommon/system_map.c-o$(obj)common/system_map.o
$(GEN_UBOOT)$(obj)common/system_map.o
endif
$(OBJS): depend
$(MAKE)-C$(CPUDIR)$(if$(REMOTE_BUILD),$@,$(notdir$@))
$(LIBS): depend$(SUBDIRS)
$(MAKE)-C$(dir$(subst$(obj),,$@))
$(LIBBOARD): depend$(LIBS)
$(MAKE)-C$(dir$(subst$(obj),,$@))
$(SUBDIRS): depend
$(MAKE)-C$@all
$(LDSCRIPT): depend
$(MAKE)-C$(dir$@)$(notdir$@)
$(obj)u-boot.lds:$(LDSCRIPT)
$(CPP)$(CPPFLAGS)$(LDPPFLAGS)-ansi-D__ASSEMBLY__-P-<$^>$@
$(NAND_SPL): $(TIMESTAMP_FILE)$(VERSION_FILE)$(obj)include/autoconf.mk
$(MAKE)-Cnand_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
$(ONENAND_IPL): $(TIMESTAMP_FILE)$(VERSION_FILE)$(obj)include/autoconf.mk
$(MAKE)-Conenand_ipl/board/$(BOARDDIR)all
$(U_BOOT_ONENAND): $(ONENAND_IPL)$(obj)u-boot.bin
cat$(ONENAND_BIN)$(obj)u-boot.bin>$(obj)u-boot-onenand.bin
$(VERSION_FILE):
@(printf'#defineU_BOOT_VERSION"U-Boot%s%s"\n'"$(U_BOOT_VERSION)"\
'$(shell$(TOPDIR)/tools/setlocalversion$(TOPDIR))')>$@.tmp
@cmp-s$@$@.tmp&&rm-f$@.tmp||mv-f$@.tmp$@
$(TIMESTAMP_FILE):
@LC_ALL=Cdate+'#defineU_BOOT_DATE"%b%d%C%y"'>$@
@LC_ALL=Cdate+'#defineU_BOOT_TIME"%T"'>>$@
gdbtools:
$(MAKE)-Ctools/gdball||exit1
updater:
$(MAKE)-Ctools/updaterall||exit1
env:
$(MAKE)-Ctools/envallMTD_VERSION=${MTD_VERSION}||exit1
#Explicitlymake_dependinsubdirscontainingmultipletargetstoprevent
#parallelsub-makescreating.dependfilessimultaneously.
dependdep: $(TIMESTAMP_FILE)$(VERSION_FILE)$(obj)include/autoconf.mk
fordirin$(SUBDIRS)$(CPUDIR)$(dir$(LDSCRIPT));do\
$(MAKE)-C$$dir_depend;done
TAG_SUBDIRS=$(SUBDIRS)
TAG_SUBDIRS+=$(dir$(__LIBS))
TAG_SUBDIRS+=include
tagsctags:
ctags-w-o$(obj)ctags`find$(TAG_SUBDIRS)\
-name'*.[chS]'-print`
etags:
etags-a-o$(obj)etags`find$(TAG_SUBDIRS)\
-name'*.[chS]'-print`
cscope:
find$(TAG_SUBDIRS)-name'*.[chS]'-print>cscope.files
cscope-b-q-k
SYSTEM_MAP=\
$(NM)$1|\
grep-v'\(compiled\)\|\(\.o$$\)\|\([aUw]\)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)'|\
LC_ALL=Csort
$(obj)System.map: $(obj)u-boot
@$(callSYSTEM_MAP,$<)>$(obj)System.map
#
#Auto-generatetheautoconf.mkfile(whichisincludedbyallmakefiles)
#
#Thistargetactuallygenerates2files;autoconf.mkandautoconf.mk.dep.
#thedepfileisonlyincludeinthistoplevelmakefiletodeterminewhen
#toregeneratetheautoconf.mkfile.
$(obj)include/autoconf.mk.dep:$(obj)include/config.hinclude/common.h
@$(XECHO)Generating$@;\
set-e;\
:Generatethedependancies;\
$(CC)-xc-DDO_DEPS_ONLY-M$(HOSTCFLAGS)$(CPPFLAGS)\
-MQ$(obj)include/autoconf.mkinclude/common.h>$@
$(obj)include/autoconf.mk:$(obj)include/config.h
@$(XECHO)Generating$@;\
set-e;\
:Extracttheconfigmacros;\
$(CPP)$(CFLAGS)-DDO_DEPS_ONLY-dMinclude/common.h|\
sed-n-ftools/scripts/define2mk.sed>$@.tmp&&\
mv$@.tmp$@
#########################################################################
else #!config.mk
all$(obj)u-boot.hex$(obj)u-boot.srec$(obj)u-boot.bin\
$(obj)u-boot.img$(obj)u-boot.dis$(obj)u-boot\
$(filter-outtools,$(SUBDIRS))$(TIMESTAMP_FILE)$(VERSION_FILE)gdbtools\
updaterenvdependdeptagsctagsetagscscope$(obj)System.map:
@echo"Systemnotconfigured-seeREADME">&2
@exit1
tools:
$(MAKE)-Ctools
tools-all:
$(MAKE)-CtoolsHOST_TOOLS_ALL=y
endif #config.mk
.PHONY:CHANGELOG
CHANGELOG:
gitlog--no-mergesU-Boot-1_1_5..|\
unexpand-a|sed-e's/\s\s*$$//'>$@
include/license.h:tools/bin2headerCOPYING
catCOPYING|gzip-9-c|./tools/bin2headerlicense_gzip>include/license.h
#########################################################################
#***删除上一次配置生成的文件
unconfig:
@rm-f$(obj)include/config.h$(obj)include/config.mk\
$(obj)board/*/config.tmp$(obj)board/*/*/config.tmp\
$(obj)include/autoconf.mk$(obj)include/autoconf.mk.dep
%_config:: unconfig
@$(MKCONFIG)-A$(@:_config=)
##%:%_config
## $(MAKE)
#
#Functionstogeneratecommonboarddirectorynames
#
lcname =$(shellecho$(1)|sed-e's/\(.*\)_config/\L\1/')
ucname =$(shellecho$(1)|sed-e's/\(.*\)_config/\U\1/')
#########################################################################
#ARM
#=====================================================================
######################################################################
##ARM1176Systems
#########################################################################
mini6410_noUSB_config\
#***清理上一次配置生成的文件,include/config.h和include/config.mk
mini6410_config: unconfig
@mkdir-p$(obj)include$(obj)board/samsung/mini6410
@mkdir-p$(obj)nand_spl/board/samsung/mini6410
@echo"#defineCONFIG_NAND_U_BOOT">$(obj)include/config.h
@echo"CONFIG_NAND_U_BOOT=y">>$(obj)include/config.mk
@if[-z"$(findstringmini6410_noUSB_config,$@)"];then \
echo"RAM_TEXT=0x57e00000">>$(obj)board/samsung/mini6410/config.tmp;\
else \
echo"RAM_TEXT=0xc7e00000">>$(obj)board/samsung/mini6410/config.tmp;\
fi
//Parameters:TargetArchitectureCPUBoard[VENDOR][SOC]
@$(MKCONFIG)mini6410armarm1176mini6410samsungs3c64xx
$0$1$2$3$4$5$6
@echo"CONFIG_NAND_U_BOOT=y">>$(obj)include/config.mk
#########################################################################
clean:
@rm-f$(obj)examples/standalone/82559_eeprom \
$(obj)examples/standalone/atmel_df_pow2 \
$(obj)examples/standalone/eepro100_eeprom \
$(obj)examples/standalone/hello_world \
$(obj)examples/standalone/interrupt \
$(obj)examples/standalone/mem_to_mem_idma2intr \
$(obj)examples/standalone/sched \
$(obj)examples/standalone/smc91111_eeprom \
$(obj)examples/standalone/test_burst \
$(obj)examples/standalone/timer
@rm-f$(obj)examples/api/demo{,.bin}
@rm-f$(obj)tools/bmp_logo $(obj)tools/easylogo/easylogo\
$(obj)tools/env/{fw_printenv,fw_setenv} \
$(obj)tools/envcrc \
$(obj)tools/gdb/{astest,gdbcont,gdbsend} \
$(obj)tools/gen_eth_addr$(obj)tools/img2srec \
$(obj)tools/mkimage $(obj)tools/mpc86x_clk \
$(obj)tools/ncb $(obj)tools/ubsha1
@rm-f$(obj)board/cray/L1/{bootscript.c,bootscript.image} \
$(obj)board/netstar/{eeprom,crcek,crcit,*.srec,*.bin} \
$(obj)board/trab/trab_fkt$(obj)board/voiceblue/eeprom\
$(obj)board/armltd/{integratorap,integratorcp}/u-boot.lds\
$(obj)u-boot.lds \
$(obj)arch/blackfin/cpu/bootrom-asm-offsets.[chs]
@rm-f$(obj)include/bmp_logo.h
@rm-f$(obj)nand_spl/{u-boot.lds,u-boot-spl,u-boot-spl.map,System.map}
@rm-f$(obj)onenand_ipl/onenand-{ipl,ipl.bin,ipl.map}
@rm-f$(ONENAND_BIN)
@rm-f$(obj)onenand_ipl/u-boot.lds
@rm-f$(TIMESTAMP_FILE)$(VERSION_FILE)
@find$(OBJTREE)-typef\
\(-name'core'-o-name'*.bak'-o-name'*~'\
-o-name'*.o' -o-name'*.a'-o-name'*.exe' \)-print\
|xargsrm-f
clobber: clean
@find$(OBJTREE)-typef\(-name.depend\
-o-name'*.srec'-o-name'*.bin'-o-nameu-boot.img\)\
-print0\
|xargs-0rm-f
@rm-f$(OBJS)$(obj)*.bak$(obj)ctags$(obj)etags$(obj)TAGS\
$(obj)cscope.*$(obj)*.*~
@rm-f$(obj)u-boot$(obj)u-boot.map$(obj)u-boot.hex$(ALL)
@rm-f$(obj)u-boot.kwb
@rm-f$(obj)u-boot.imx
@rm-f$(obj)tools/{env/crc32.c,inca-swap-bytes}
@rm-f$(obj)arch/powerpc/cpu/mpc824x/bedbug_603e.c
@rm-f$(obj)include/asm/proc$(obj)include/asm/arch$(obj)include/asm
@[!-d$(obj)nand_spl]||find$(obj)nand_spl-name"*"-typel-print|xargsrm-f
@[!-d$(obj)onenand_ipl]||find$(obj)onenand_ipl-name"*"-typel-print|xargsrm-f
ifeq($(OBJTREE),$(SRCTREE))
mrproper\
distclean: clobberunconfig
else
mrproper\
distclean: clobberunconfig
rm-rf$(obj)*
endif
backup:
F=`basename$(TOPDIR)`;cd..;\
gtar--force-local-zcvf`LC_ALL=Cdate"+$$F-%Y-%m-%d-%T.tar.gz"`$$F
#########################################################################
相关推荐
本文将详细解析U-Boot项目的Makefile文件,帮助读者理解如何配置和编译U-Boot。 #### 一、项目概述 U-Boot是一个高度可配置的启动加载程序,它基于Linux内核的设计理念,旨在提供一个灵活且强大的启动解决方案。在...
### U-Boot Makefile分析 #### 一、U-Boot Makefile概述 U-Boot (Universal Boot Loader) 是一个开放源代码的引导加载程序项目,主要用于嵌入式系统的启动加载。它支持多种处理器架构和外围设备,使得它可以广泛...
### U-BOOT MAKEFILE 分析 U-Boot(Universal Boot Loader)是一款开源的启动加载程序,主要用于嵌入式系统的引导加载。它具有高度的可移植性,并支持多种处理器架构及设备。本文旨在深入分析U-Boot Makefile的核心...
【U-Boot Makefile分析】 在嵌入式系统开发中,U-Boot 是一个至关重要的组件,它作为引导加载程序负责初始化硬件、加载操作系统映像等任务。在深入理解 U-Boot 的功能之前,理解其 Makefile 的工作原理至关重要,...
本文将深入探讨U-Boot项目的Makefile文件结构及其编译流程。 #### 二、U-Boot源码结构解析 U-Boot项目的源码组织清晰,便于理解和维护。解压后的源码目录结构如下: 1. **board**:存储与特定硬件平台相关的代码...
【U-Boot Makefile 分析】 U-Boot的Makefile是构建系统的核心,它负责编译、链接以及生成适用于特定硬件平台的引导加载程序。在Linux环境下进行内核移植时,理解和分析U-Boot的Makefile至关重要,因为它决定了编译...
本文主要分析 u-boot 的 makefile 文件,特别是针对 jz2440 板卡的配置过程。通过对 u-boot-1.16 版本 makefile 文件的解析,我们将深入了解 u-boot 的编译配置流程。 #### 二、makefile 基础概念回顾 1. **变量**...
通过解压"u-boot-1.1.6.tar.bz"文件,我们可以获取到u-boot源代码,其中包括Makefile、驱动代码、配置文件等,这些是我们构建和定制u-boot的基础。 JZ2440是一款基于ARM920T内核的微处理器,由国内芯片厂商设计,...
修改Makefile文件的目的是为了使u-boot能够正确地编译和链接。 4. 修改include文件夹:include文件夹中包含了大量的头文件,这些头文件定义了u-boot的配置和行为。需要根据实际情况对这些头文件进行修改,以适应...
根据提供的文件内容,我们可以提取关于U-Boot的详细知识点,重点涵盖了U-Boot简介、许可证信息、软件状态、获取帮助的方式以及U-Boot的特性和用途。以下是详细的知识点: 1. U-Boot简介: U-Boot是一个针对嵌入式板...
### U-Boot-1.3.1源码分析与移植详解 #### U-Boot-1.3.1:深入理解与应用 U-Boot-1.3.1是一款广泛应用于嵌入式系统的开源启动加载器,它支持多种处理器架构,包括但不限于ARM、PowerPC、x86等,为嵌入式设备提供了...
本文将详细分析u-boot-1.1.4的源代码结构,特别关注其Makefile和config.mk文件,以帮助理解其构建过程和移植策略。 u-boot的源代码结构清晰,由多个子目录构成,每个子目录对应特定的功能模块。例如,board目录包含...
◆ board:和一些已有开发板有关的文件,比如Makefile和u-boot.lds等都和具体开发板的硬件和地址分配有关。 ◆ common:与体系结构无关的文件,实现各种命令的C文件。 ◆ cpu:CPU相关文件,其中的子目录都是以U-...
- **修改Makefile**:根据目标平台的需求调整Makefile文件中的编译选项。 - **修改Maconfig**:配置特定硬件平台的参数,确保U-Boot能够适配不同的硬件环境。 #### 六、在MSYS下编译U-Boot - **编译U-Boot**:通过...
U-Boot的源代码组织结构清晰,其中Makefile是控制整个编译过程的关键文件。 二、Makefile基础 Makefile是构建软件的脚本,它定义了目标文件、依赖关系以及如何构建这些目标。在U-Boot中,Makefile的作用包括配置...
从顶层Makefile到mkconfig脚本,从boards.cfg到具体的平台配置,U-Boot的每一个环节都是精心设计的,它们共同确保了U-Boot作为一个嵌入式引导加载程序的灵活性和强大的功能。在这个过程中,开发者需要具备一定的...
之后,顶层makefile调用各子目录的makefile编译目标文件和库,最后链接生成u-boot.bin。 二、u-boot的流程、数据结构及内存分配 1. u-boot流程 u-boot启动时,首先执行启动代码,初始化硬件,然后读取环境变量,...