<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > GNU ARM匯編--(十七)u-boot的makefile和mkconfig解讀

          GNU ARM匯編--(十七)u-boot的makefile和mkconfig解讀

          作者: 時間:2016-11-26 來源:網絡 收藏
        1. LIBS:=$(addprefix$(obj),$(sort$(LIBS)))
        2. ########################################
        3. #將LIBS排序后為LIBS增加前綴
        4. #########################################
        5. .PHONY:$(LIBS)
        6. LIBBOARD=board/$(BOARDDIR)/lib$(BOARD).o
        7. LIBBOARD:=$(addprefix$(obj),$(LIBBOARD))
        8. ###########################################
        9. #為LIBBOARD增加前綴,LIBBOARD就是board/samsung/smdk2410/libsmdk2410.o
        10. ###########################################
        11. #AddGCClib
        12. ifdefUSE_PRIVATE_LIBGCC
        13. ifeq("$(USE_PRIVATE_LIBGCC)","yes")
        14. PLATFORM_LIBGCC=$(OBJTREE)/arch/$(ARCH)/lib/libgcc.o
        15. else
        16. PLATFORM_LIBGCC=-L$(USE_PRIVATE_LIBGCC)-lgcc
        17. endif
        18. else
        19. PLATFORM_LIBGCC:=-L$(shelldirname`$(CC)$(CFLAGS)-print-libgcc-file-name`)-lgcc
        20. endif
        21. PLATFORM_LIBS+=$(PLATFORM_LIBGCC)
        22. exportPLATFORM_LIBS
        23. #SpecialflagsforCPPwhenprocessingthelinkerscript.
        24. #Passtheversiondownsowecanhandlebackwardscompatibility
        25. #onthefly.
        26. LDPPFLAGS+=
        27. -include$(TOPDIR)/include/u-boot/u-boot.lds.h
        28. -DCPUDIR=$(CPUDIR)
        29. $(shell$(LD)--version|
        30. sed-nes/GNUldversion..*/-DLD_MAJOR=1-DLD_MINOR=2/p)
        31. __OBJS:=$(subst$(obj),,$(OBJS))
        32. __LIBS:=$(subst$(obj),,$(LIBS))$(subst$(obj),,$(LIBBOARD))
        33. #########################################################################
        34. #########################################################################
        35. ifneq($(CONFIG_BOARD_SIZE_LIMIT),)
        36. BOARD_SIZE_CHECK=
        37. @actual=`wc-c$@|awk{print$$1}`;
        38. limit=$(CONFIG_BOARD_SIZE_LIMIT);
        39. iftest
          limit;then
        40. echo"$@exceedsfilesizelimit:";
        41. echo"limit:$$limitbytes";
        42. echo"actual:$$actualbytes";
        43. echo"excess:$$((actual-limit))bytes";
        44. exit1;
        45. fi
        46. else
        47. BOARD_SIZE_CHECK=
        48. endif
        49. 本文引用地址:http://www.ex-cimer.com/article/201611/321714.htm

          這里也給出頂層目錄下的config.mk文件的注釋:

          [cpp]view plaincopy
          1. #
          2. #(C)Copyright2000-2006
          3. #WolfgangDenk,DENXSoftwareEngineering,wd@denx.de.
          4. #
          5. #SeefileCREDITSforlistofpeoplewhocontributedtothis
          6. #project.
          7. #
          8. #Thisprogramisfreesoftware;youcanredistributeitand/or
          9. #modifyitunderthetermsoftheGNUGeneralPublicLicenseas
          10. #publishedbytheFreeSoftwareFoundation;eitherversion2of
          11. #theLicense,or(atyouroption)anylaterversion.
          12. #
          13. #Thisprogramisdistributedinthehopethatitwillbeuseful,
          14. #butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof
          15. #MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe
          16. #GNUGeneralPublicLicenseformoredetails.
          17. #
          18. #YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense
          19. #alongwiththisprogram;ifnot,writetotheFreeSoftware
          20. #Foundation,Inc.,59TemplePlace,Suite330,Boston,
          21. #MA02111-1307USA
          22. #
          23. #########################################################################
          24. ifeq($(CURDIR),$(SRCTREE))
          25. dir:=
          26. else
          27. dir:=$(subst$(SRCTREE)/,,$(CURDIR))
          28. endif
          29. ###########################################################################
          30. #在頂層makefile中已經分析了CURDIR和SRCTREE都是當前目錄,所以這里dir暫時為空
          31. ###########################################################################
          32. ifneq($(OBJTREE),$(SRCTREE))
          33. #CreateobjectfilesforSPLinaseparatedirectory
          34. ifeq($(CONFIG_SPL_BUILD),y)
          35. obj:=$(if$(dir),$(SPLTREE)/$(dir)/,$(SPLTREE)/)
          36. else
          37. obj:=$(if$(dir),$(OBJTREE)/$(dir)/,$(OBJTREE)/)
          38. endif
          39. src:=$(if$(dir),$(SRCTREE)/$(dir)/,$(SRCTREE)/)
          40. $(shellmkdir-p$(obj))
          41. else
          42. #CreateobjectfilesforSPLinaseparatedirectory
          43. ifeq($(CONFIG_SPL_BUILD),y)
          44. obj:=$(if$(dir),$(SPLTREE)/$(dir)/,$(SPLTREE)/)
          45. $(shellmkdir-p$(obj))
          46. else
          47. obj:=
          48. endif
          49. src:=
          50. endif
          51. ########################################################################################
          52. #首先OBJTREE和SRCTREE都是當前目錄,所以執(zhí)行else
          53. #查找CONFIG_SPL_BUILD是否定義為y,在autoconf.mk中,并沒有這個定義,所以obj和src暫時也為空
          54. ########################################################################################
          55. #cleantheslate...
          56. PLATFORM_RELFLAGS=
          57. PLATFORM_CPPFLAGS=
          58. PLATFORM_LDFLAGS=
          59. #########################################################################
          60. HOSTCFLAGS=-Wall-Wstrict-prototypes-O2-fomit-frame-pointer
          61. $(HOSTCPPFLAGS)
          62. HOSTSTRIP=strip
          63. #
          64. #MacOSX/DarwinsCpreprocessorisApplespecific.It
          65. #generatesnumerouserrorsandwarnings.Wewanttobypassit
          66. #anduseGNUCscpp.Todothiswepassthe-traditional-cpp
          67. #optiontothecompiler.Notethatthe-traditional-cppflag
          68. #DOESNOThavethesamesemanticsasGNUCsflag,allitdoes
          69. #isinvoketheGNUpreprocessorinstockANSI/ISOCfashion.
          70. #
          71. #Appleslinkerissimilar,thankstothenew2stagelinking
          72. #multiplesymboldefinitionsaretreatedaserrors,hencethe
          73. #-multiply_definedsuppressoptiontoturnoffthiserror.
          74. #
          75. ifeq($(HOSTOS),darwin)
          76. #getmajorandminorproductversion(e.g.10and6forSnowLeopard)
          77. DARWIN_MAJOR_VERSION=$(shellsw_vers-productVersion|cut-f1-d.)
          78. DARWIN_MINOR_VERSION=$(shellsw_vers-productVersion|cut-f2-d.)
          79. os_x_before=$(shellif[$(DARWIN_MAJOR_VERSION)-le$(1)-a
          80. $(DARWIN_MINOR_VERSION)-le$(2)];thenecho"$(3)";elseecho"$(4)";fi;)
          81. #SnowLeopardsbuildenvironmenthasnolongerrestrictionsasdescribedabove
          82. HOSTCC=$(callos_x_before,10,5,"cc","gcc")
          83. HOSTCFLAGS+=$(callos_x_before,10,4,"-traditional-cpp")
          84. HOSTLDFLAGS+=$(callos_x_before,10,5,"-multiply_definedsuppress")
          85. else
          86. HOSTCC=gcc
          87. endif
          88. ifeq($(HOSTOS),cygwin)
          89. HOSTCFLAGS+=-ansi
          90. endif
          91. #Webuildsomefileswithextrapedanticflagstotrytominimizethings
          92. #thatwontbuildonsomeweirdhostcompiler--thoughtherearelotsof
          93. #exceptionsforfilesthatarentcomplaint.
          94. HOSTCFLAGS_NOPED=$(filter-out-pedantic,$(HOSTCFLAGS))
          95. HOSTCFLAGS+=-pedantic
          96. ############################################################
          97. #HOSTCFLAGS_NOPED是利用filter-out函數從HOSTCFLAGS中過濾掉-pedantic選項
          98. #而HOSTCFLAGS追加上-pedantic選項
          99. ############################################################
          100. #########################################################################
          101. #
          102. #Optionchecker,gccversion(courtesylinuxkernel)toensure
          103. #onlysupportedcompileroptionsareused
          104. #
          105. CC_OPTIONS_CACHE_FILE:=$(OBJTREE)/include/generated/cc_options.mk
          106. CC_TEST_OFILE:=$(OBJTREE)/include/generated/cc_test_file.o
          107. -include$(CC_OPTIONS_CACHE_FILE)
          108. #############################################################################
          109. #定義編譯選項
          110. #在cc_options.mk中有如下選項:
          111. #CC_OPTIONS+=-marm
          112. #CC_OPTIONS+=-mno-thumb-interwork
          113. #CC_OPTIONS+=-mapcs-32
          114. #CC_OPTIONS+=-malignment-traps
          115. #CC_OPTIONS+=-Wno-format-nonliteral
          116. #CC_OPTIONS+=-Wno-format-security
          117. #CC_OPTIONS+=-mabi=apcs-gnu
          118. #CC_OPTIONS+=-mabi=aapcs-linux
          119. #############################################################################
          120. cc-option-sys=$(shellmkdir-p$(dir$(CC_TEST_OFILE));
          121. if$(CC)$(CFLAGS)$(1)-S-xc/dev/null-o$(CC_TEST_OFILE)
          122. >/dev/null2>&1;then
          123. echoCC_OPTIONS+=$(strip$1)>>$(CC_OPTIONS_CACHE_FILE);
          124. echo"$(1)";fi)
          125. ifeq($(CONFIG_CC_OPT_CACHE_DISABLE),y)
          126. cc-option=$(strip$(if$(callcc-option-sys,$1),$1,$2))
          127. else
          128. cc-option=$(strip$(if$(findstring$1,$(CC_OPTIONS)),$1,
          129. $(if$(callcc-option-sys,$1),$1,$2)))
          130. endif
          131. ###########################################################################################
          132. #定義兩個函數,cc-option-sys被cc-option調用
          133. #cc-option被后面的函數調用
          134. ############################################################################################
          135. #cc-version
          136. #Usagegcc-ver:=$(callcc-version)
          137. cc-version=$(shell$(SHELL)$(SRCTREE)/tools/gcc-version.sh$(CC))
          138. ##########################################################################################
          139. #使用tools/gcc-version.sh腳本來獲取編譯器的版本
          140. #在頂層makefile中,有調用cc-version函數
          141. ##########################################################################################
          142. #
          143. #Includethemakevariables(CC,etc...)
          144. #
          145. AS=$(CROSS_COMPILE)as
          146. LD=$(CROSS_COMPILE)ld
          147. CC=$(CROSS_COMPILE)gcc
          148. CPP=$(CC)-E
          149. AR=$(CROSS_COMPILE)ar
          150. NM=$(CROSS_COMPILE)nm
          151. LDR=$(CROSS_COMPILE)ldr
          152. STRIP=$(CROSS_COMPILE)strip
          153. OBJCOPY=$(CROSS_COMPILE)objcopy
          154. OBJDUMP=$(CROSS_COMPILE)objdump
          155. RANLIB=$(CROSS_COMPILE)RANLIB
          156. DTC=dtc
          157. #########################################################################
          158. #定義匯編器,連接器,編譯器,打包工具,反匯編工具,值的注意的RANLIB的作用是在靜態(tài)庫有添加新的.o后,負責更新索引.
          159. #########################################################################
          160. #Loadgeneratedboardconfiguration
          161. sinclude$(OBJTREE)/include/autoconf.mk
          162. sinclude$(OBJTREE)/include/config.mk
          163. ################################################################################################
          164. #包上配置編譯時產生的autoconf.mk和config.mk文件
          165. ################################################################################################
          166. #Somearchitectureconfig.mkfilesneedtoknowwhatCPUDIRissetto,
          167. #socalculateCPUDIRbeforeincludingARCH/SOC/CPUconfig.mkfiles.
          168. #Checkifarch/$ARCH/cpu/$CPUexists,otherwiseassumearch/$ARCH/cpucontains
          169. #CPU-specificcode.
          170. CPUDIR=arch/$(ARCH)/cpu/$(CPU)
          171. ifneq($(SRCTREE)/$(CPUDIR),$(wildcard$(SRCTREE)/$(CPUDIR)))
          172. CPUDIR=arch/$(ARCH)/cpu
          173. endif
          174. #################################################################################################
          175. #定義CPUDIR為arch/arm/cpu/arm920t
          176. #################################################################################################
          177. sinclude$(TOPDIR)/arch/$(ARCH)/config.mk#includearchitecturedependendrules
          178. sinclude$(TOPDIR)/$(CPUDIR)/config.mk#includeCPUspecificrules
          179. ##################################################################################################
          180. #包上arch/arm/config.mk和/arch/arm/cpu/arm920t/config.mk文件
          181. ##################################################################################################
          182. ifdefSOC
          183. sinclude$(TOPDIR)/$(CPUDIR)/$(SOC)/config.mk#includeSoCspecificrules
          184. endif
          185. ######################################################################
          186. #包上arch/arm/cpu/arm920t/s3c24x0/config.mk文件
          187. #####################################################################
          188. ifdefVENDOR
          189. BOARDDIR=$(VENDOR)/$(BOARD)
          190. else
          191. BOARDDIR=$(BOARD)
          192. endif
          193. ifdefBOARD
          194. sinclude$(TOPDIR)/board/$(BOARDDIR)/config.mk#includeboardspecificrules
          195. endif
          196. ######################################################################################
          197. #包上board/samsung/smdk2410/config.mk文件
          198. ######################################################################################
          199. #########################################################################
          200. #Wedontactuallyuse$(ARFLAGS)anywhereanymore,socatchpeople
          201. #whoareportingoldcodetolatestmainlinebutnotupdating$(AR).
          202. ARFLAGS=$(errorupdateyourMakefiletousecmd_link_o_targetandnotAR)
          203. RELFLAGS=$(PLATFORM_RELFLAGS)
          204. DBGFLAGS=-g#-DDEBUG
          205. OPTFLAGS=-Os#-fomit-frame-pointer
          206. OBJCFLAGS+=--gap-fill=0xff
          207. gccincdir:=$(shell$(CC)-print-file-name=include)
          208. CPPFLAGS:=$(DBGFLAGS)$(OPTFLAGS)$(RELFLAGS)
          209. -D__KERNEL__
          210. #Enablegarbagecollectionofun-usedsectionsforSPL
          211. ifeq($(CONFIG_SPL_BUILD),y)
          212. CPPFLAGS+=-ffunction-sections-fdata-sections
          213. LDFLAGS_FINAL+=--gc-sections
          214. endif
          215. ifneq($(CONFIG_SYS_TEXT_BASE),)
          216. CPPFLAGS+=-DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE)
          217. endif
          218. ifneq($(CONFIG_SPL_TEXT_BASE),)
          219. CPPFLAGS+=-DCONFIG_SPL_TEXT_BASE=$(CONFIG_SPL_TEXT_BASE)
          220. endif
          221. ifneq($(CONFIG_SPL_PAD_TO),)
          222. CPPFLAGS+=-DCONFIG_SPL_PAD_TO=$(CONFIG_SPL_PAD_TO)
          223. endif
          224. ifeq($(CONFIG_SPL_BUILD),y)
          225. CPPFLAGS+=-DCONFIG_SPL_BUILD
          226. endif
          227. ifneq($(RESET_VECTOR_ADDRESS),)
          228. CPPFLAGS+=-DRESET_VECTOR_ADDRESS=$(RESET_VECTOR_ADDRESS)
          229. endif
          230. ifneq($(OBJTREE),$(SRCTREE))
          231. CPPFLAGS+=-I$(OBJTREE)/include2-I$(OBJTREE)/include
          232. endif
          233. CPPFLAGS+=-I$(TOPDIR)/include
          234. CPPFLAGS+=-fno-builtin-ffreestanding-nostdinc
          235. -isystem$(gccincdir)-pipe$(PLATFORM_CPPFLAGS)
          236. ifdefBUILD_TAG
          237. CFLAGS:=$(CPPFLAGS)-Wall-Wstrict-prototypes
          238. -DBUILD_TAG="$(BUILD_TAG)"
          239. else
          240. CFLAGS:=$(CPPFLAGS)-Wall-Wstrict-prototypes
          241. endif
          242. CFLAGS_SSP:=$(callcc-option,-fno-stack-protector)
          243. CFLAGS+=$(CFLAGS_SSP)
          244. #Sometoolchainsenablesecurityrelatedwarningflagsbydefault,
          245. #buttheydontmakemuchsenseintheu-bootworld,sodisablethem.
          246. CFLAGS_WARN:=$(callcc-option,-Wno-format-nonliteral)
          247. $(callcc-option,-Wno-format-security)
          248. CFLAGS+=$(CFLAGS_WARN)
          249. #Reportstackusageifsupported
          250. CFLAGS_STACK:=$(callcc-option,-fstack-usage)
          251. CFLAGS+=$(CFLAGS_STACK)
          252. #$(CPPFLAGS)sets-g,whichcausesgcctopassasuitable-g
          253. #optiontotheassembler.
          254. AFLAGS_DEBUG:=
          255. #turnjbsrintojsrform68k
          256. ifeq($(ARCH),m68k)
          257. ifeq($(findstring3.4,$(shell$(CC)--version)),3.4)
          258. AFLAGS_DEBUG:=-Wa,-gstabs,-S
          259. endif
          260. endif


          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();