新聞中心

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

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

        作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏
      1. LIBS:=$(addprefix$(obj),$(sort$(LIBS)))
      2. ########################################
      3. #將LIBS排序后為L(zhǎng)IBS增加前綴
      4. #########################################
      5. .PHONY:$(LIBS)
      6. LIBBOARD=board/$(BOARDDIR)/lib$(BOARD).o
      7. LIBBOARD:=$(addprefix$(obj),$(LIBBOARD))
      8. ###########################################
      9. #為L(zhǎng)IBBOARD增加前綴,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.104case.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中已經(jīng)分析了CURDIR和SRCTREE都是當(dāng)前目錄,所以這里dir暫時(shí)為空
        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都是當(dāng)前目錄,所以執(zhí)行else
        53. #查找CONFIG_SPL_BUILD是否定義為y,在autoconf.mk中,并沒(méi)有這個(gè)定義,所以obj和src暫時(shí)也為空
        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函數(shù)從HOSTCFLAGS中過(guò)濾掉-pedantic選項(xiàng)
        98. #而HOSTCFLAGS追加上-pedantic選項(xiàng)
        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. #定義編譯選項(xiàng)
        110. #在cc_options.mk中有如下選項(xiàng):
        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. #定義兩個(gè)函數(shù),cc-option-sys被cc-option調(diào)用
        133. #cc-option被后面的函數(shù)調(diào)用
        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腳本來(lái)獲取編譯器的版本
        140. #在頂層makefile中,有調(diào)用cc-version函數(shù)
        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)庫(kù)有添加新的.o后,負(fù)責(zé)更新索引.
        159. #########################################################################
        160. #Loadgeneratedboardconfiguration
        161. sinclude$(OBJTREE)/include/autoconf.mk
        162. sinclude$(OBJTREE)/include/config.mk
        163. ################################################################################################
        164. #包上配置編譯時(shí)產(chǎn)生的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


        關(guān)鍵詞: ARM匯編u-bootmakefilemkconfi

        評(píng)論


        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 中牟县| 浪卡子县| 浦县| 内丘县| 彭山县| 凭祥市| 琼中| 太仓市| 临高县| 曲阜市| 晋州市| 昌邑市| 微山县| 越西县| 镇远县| 阜康市| 嵩明县| 万宁市| 和平县| 双辽市| 定兴县| 岑巩县| 星子县| 明水县| 伊宁市| 漳州市| 武清区| 驻马店市| 苍梧县| 门头沟区| 资源县| 同德县| 慈溪市| 来宾市| 文化| 锡林浩特市| 迭部县| 涿州市| 滦南县| 襄樊市| 东兰县|