`

u-boot Makefile 文件分析

 
阅读更多

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.

#***如果输出目录和源码目录不相同,对objsrc进行赋值,

#***两者会在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.hinclude/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项目的Makefile文件,帮助读者理解如何配置和编译U-Boot。 #### 一、项目概述 U-Boot是一个高度可配置的启动加载程序,它基于Linux内核的设计理念,旨在提供一个灵活且强大的启动解决方案。在...

    U-Boot_Makefile分析

    ### U-Boot Makefile分析 #### 一、U-Boot Makefile概述 U-Boot (Universal Boot Loader) 是一个开放源代码的引导加载程序项目,主要用于嵌入式系统的启动加载。它支持多种处理器架构和外围设备,使得它可以广泛...

    U-BOOT MAKEFILE 分析

    ### U-BOOT MAKEFILE 分析 U-Boot(Universal Boot Loader)是一款开源的启动加载程序,主要用于嵌入式系统的引导加载。它具有高度的可移植性,并支持多种处理器架构及设备。本文旨在深入分析U-Boot Makefile的核心...

    U-Boot Makefile分析

    【U-Boot Makefile分析】 在嵌入式系统开发中,U-Boot 是一个至关重要的组件,它作为引导加载程序负责初始化硬件、加载操作系统映像等任务。在深入理解 U-Boot 的功能之前,理解其 Makefile 的工作原理至关重要,...

    U-BOOT中MAKEFILE详解

    本文将深入探讨U-Boot项目的Makefile文件结构及其编译流程。 #### 二、U-Boot源码结构解析 U-Boot项目的源码组织清晰,便于理解和维护。解压后的源码目录结构如下: 1. **board**:存储与特定硬件平台相关的代码...

    u-boot makefile 分析

    【U-Boot Makefile 分析】 U-Boot的Makefile是构建系统的核心,它负责编译、链接以及生成适用于特定硬件平台的引导加载程序。在Linux环境下进行内核移植时,理解和分析U-Boot的Makefile至关重要,因为它决定了编译...

    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-1.1.6_jz2440.patch

    通过解压"u-boot-1.1.6.tar.bz"文件,我们可以获取到u-boot源代码,其中包括Makefile、驱动代码、配置文件等,这些是我们构建和定制u-boot的基础。 JZ2440是一款基于ARM920T内核的微处理器,由国内芯片厂商设计,...

    u-boot移植过程详细笔记

    修改Makefile文件的目的是为了使u-boot能够正确地编译和链接。 4. 修改include文件夹:include文件夹中包含了大量的头文件,这些头文件定义了u-boot的配置和行为。需要根据实际情况对这些头文件进行修改,以适应...

    u-boot readme文件

    根据提供的文件内容,我们可以提取关于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:深入理解与应用 U-Boot-1.3.1是一款广泛应用于嵌入式系统的开源启动加载器,它支持多种处理器架构,包括但不限于ARM、PowerPC、x86等,为嵌入式设备提供了...

    u-boot-1.1.4移植分析

    本文将详细分析u-boot-1.1.4的源代码结构,特别关注其Makefile和config.mk文件,以帮助理解其构建过程和移植策略。 u-boot的源代码结构清晰,由多个子目录构成,每个子目录对应特定的功能模块。例如,board目录包含...

    u-boot开源代码

    ◆ board:和一些已有开发板有关的文件,比如Makefile和u-boot.lds等都和具体开发板的硬件和地址分配有关。 ◆ common:与体系结构无关的文件,实现各种命令的C文件。 ◆ cpu:CPU相关文件,其中的子目录都是以U-...

    windows下编译u-boot代码

    - **修改Makefile**:根据目标平台的需求调整Makefile文件中的编译选项。 - **修改Maconfig**:配置特定硬件平台的参数,确保U-Boot能够适配不同的硬件环境。 #### 六、在MSYS下编译U-Boot - **编译U-Boot**:通过...

    U-Boot_Makefile-analyse.zip_uboot

    U-Boot的源代码组织结构清晰,其中Makefile是控制整个编译过程的关键文件。 二、Makefile基础 Makefile是构建软件的脚本,它定义了目标文件、依赖关系以及如何构建这些目标。在U-Boot中,Makefile的作用包括配置...

    u-boot_2014_04初步分析

    从顶层Makefile到mkconfig脚本,从boards.cfg到具体的平台配置,U-Boot的每一个环节都是精心设计的,它们共同确保了U-Boot作为一个嵌入式引导加载程序的灵活性和强大的功能。在这个过程中,开发者需要具备一定的...

    u-boot源码分析

    之后,顶层makefile调用各子目录的makefile编译目标文件和库,最后链接生成u-boot.bin。 二、u-boot的流程、数据结构及内存分配 1. u-boot流程 u-boot启动时,首先执行启动代码,初始化硬件,然后读取环境变量,...

Global site tag (gtag.js) - Google Analytics