在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

            作者: 時間:2016-11-26 來源:網(wǎng)絡 收藏
          1. AFLAGS:=$(AFLAGS_DEBUG)-D__ASSEMBLY__$(CPPFLAGS)
          2. LDFLAGS+=$(PLATFORM_LDFLAGS)
          3. LDFLAGS_FINAL+=-Bstatic
          4. LDFLAGS_u-boot+=-T$(obj)u-boot.lds$(LDFLAGS_FINAL)
          5. ifneq($(CONFIG_SYS_TEXT_BASE),)
          6. LDFLAGS_u-boot+=-Ttext$(CONFIG_SYS_TEXT_BASE)
          7. endif
          8. LDFLAGS_u-boot-spl+=-T$(obj)u-boot-spl.lds$(LDFLAGS_FINAL)
          9. ifneq($(CONFIG_SPL_TEXT_BASE),)
          10. LDFLAGS_u-boot-spl+=-Ttext$(CONFIG_SPL_TEXT_BASE)
          11. endif
          12. #LocationofausableBFDlibrary,wherewedefine"usable"as
          13. #"builtfor${HOST},supports${TARGET}".Sensiblevaluesare
          14. #-Whencross-compiling:therootofthecross-environment
          15. #-Linux/ppc(native):/usr
          16. #-NetBSD/ppc(native):youlose...(mustextractthesefromthe
          17. #binutilsbuilddirectory,plusthenativeandU-Bootinclude
          18. #filesdontlikeeachother)
          19. #
          20. #Sofar,thisisusedonlybytools/gdb/Makefile.
          21. ifeq($(HOSTOS),darwin)
          22. BFD_ROOT_DIR=/usr/local/tools
          23. else
          24. ifeq($(HOSTARCH),$(ARCH))
          25. #native
          26. BFD_ROOT_DIR=/usr
          27. else
          28. #BFD_ROOT_DIR=/LinuxPPC/CDK#Linux/i386
          29. #BFD_ROOT_DIR=/usr/pkg/cross#NetBSD/i386
          30. BFD_ROOT_DIR=/opt/powerpc
          31. endif
          32. endif
          33. #########################################################################
          34. exportHOSTCCHOSTCFLAGSHOSTLDFLAGSPEDCFLAGSHOSTSTRIPCROSS_COMPILE
          35. ASLDCCCPPARNMSTRIPOBJCOPYOBJDUMPMAKE
          36. exportCONFIG_SYS_TEXT_BASEPLATFORM_CPPFLAGSPLATFORM_RELFLAGSCPPFLAGSCFLAGSAFLAGS
          37. #########################################################################
          38. #Allowboardstousecustomoptimizeflagsonaperdir/filebasis
          39. BCURDIR=$(subst$(SRCTREE)/,,$(CURDIR:$(obj)%=%))
          40. ALL_AFLAGS=$(AFLAGS)$(AFLAGS_$(BCURDIR)/$(@F))$(AFLAGS_$(BCURDIR))
          41. ALL_CFLAGS=$(CFLAGS)$(CFLAGS_$(BCURDIR)/$(@F))$(CFLAGS_$(BCURDIR))
          42. EXTRA_CPPFLAGS=$(CPPFLAGS_$(BCURDIR)/$(@F))$(CPPFLAGS_$(BCURDIR))
          43. ALL_CFLAGS+=$(EXTRA_CPPFLAGS)
          44. #The_DEPversionusesthe$
          45. #Seerules.mk
          46. EXTRA_CPPFLAGS_DEP=$(CPPFLAGS_$(BCURDIR)/$(addsuffix.o,$(basename$<)))
          47. $(CPPFLAGS_$(BCURDIR))
          48. $(obj)%.s:%.S
          49. $(CPP)$(ALL_AFLAGS)-o$@$<
          50. $(obj)%.o:%.S
          51. $(CC)$(ALL_AFLAGS)-o$@$<-c
          52. $(obj)%.o:%.c
          53. $(CC)$(ALL_CFLAGS)-o$@$<-c
          54. $(obj)%.i:%.c
          55. $(CPP)$(ALL_CFLAGS)-o$@$<-c
          56. $(obj)%.s:%.c
          57. $(CC)$(ALL_CFLAGS)-o$@$<-c-S
          58. #########################################################################
          59. #Ifthelistofobjectstolinkisempty,justcreateanemptybuilt-in.o
          60. cmd_link_o_target=$(if$(strip$1),
          61. $(LD)$(LDFLAGS)-r-o$@$1,
          62. rm-f$@;$(AR)rcs$@)
          63. #########################################################################

          64. 主要是一些變量和函數(shù)的定義,編譯鏈接的參數(shù)設置以及依賴規(guī)則.

            本文引用地址:http://www.biyoush.com/article/201611/321714.htm

            最后分析下make:

            [cpp]view plaincopy
            1. $(obj)include/autoconf.mk.dep:$(obj)include/config.hinclude/common.h
            2. @$(XECHO)Generating$@;
            3. set-e;
            4. :Generatethedependancies;
            5. $(CC)-xc-DDO_DEPS_ONLY-M$(CFLAGS)$(CPPFLAGS)
            6. -MQ$(obj)include/autoconf.mkinclude/common.h>$@
            7. $(obj)include/autoconf.mk:$(obj)include/config.h
            8. @$(XECHO)Generating$@;
            9. set-e;
            10. :Extracttheconfigmacros;
            11. $(CPP)$(CFLAGS)-DDO_DEPS_ONLY-dMinclude/common.h|
            12. sed-n-ftools/scripts/define2mk.sed>[email protected]&&
            13. [email protected]$@
            第一個是生成include/autoconf.mk的依賴文件

            第二個是根據(jù)include/config.h的文件內(nèi)容,利用tools/scripts/define2mk.sed腳本將所有的CONFIG提取到autoconf.mk文件中

            終極目標是:ALL-y += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map

            u-boot.srec也是根據(jù)u-boot用objcopy工具搞出來的,不知的什么作用

            u-boot.bin也是根據(jù)u-boot用objcopy工具搞出來的,最終燒寫的二進制bin檔

            System.map是符號列表

            [cpp]view plaincopy
            1. $(obj)u-boot.bin:$(obj)u-boot
            2. $(OBJCOPY)${OBJCFLAGS}-Obinary$<$@
            3. $(BOARD_SIZE_CHECK)
            4. ###################################################################################
            5. #要得到最后的u-boot.bin,必須得到u-boot.u-boot.bin是最后要燒寫到板子上的二進制bin檔
            6. #利用objcopy來得到這個二進制文件($@是規(guī)則的目標文件名,$<是規(guī)則的第一個依賴文件名)
            7. #調用BOARD_SIZE_CHECK
            8. ###################################################################################

            u-boot的依賴分析:
            $(obj)u-boot: depend
            $(SUBDIR_TOOLS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT) $(obj)u-boot.lds
            $(GEN_UBOOT)


            u-boot 依賴depend $(SUBDIR_TOOLS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT) $(obj)u-boot.lds
            然后用$(GEN_UBOOT)生成最后的u-boot,GEN_UBOOT就是用ld鏈接的過程


            a.看一下depend:
            depend dep: $(TIMESTAMP_FILE) $(VERSION_FILE)
            $(obj)include/autoconf.mk
            $(obj)include/generated/generic-asm-offsets.h
            $(obj)include/generated/asm-offsets.h
            for dir in $(SUBDIRS) $(CPUDIR) $(LDSCRIPT_MAKEFILE_DIR) ; do
            $(MAKE) -C $$dir _depend ; done
            對$(SUBDIRS) $(CPUDIR) $(LDSCRIPT_MAKEFILE_DIR)目錄生成depend依賴文件;
            而_depend是在rules.mk中定義的,利用CC的-M選項生成依賴文件.

            b.看一下$(SUBDIR_TOOLS):
            tools目錄

            c.看一下$(OBJS):
            $(OBJS): depend
            $(MAKE) -C $(CPUDIR) $(if $(REMOTE_BUILD),$@,$(notdir $@))
            看下$(if $(REMOTE_BUILD),$@,$(notdir $@))
            因為$(REMOTE_BUILD)為空,所以返回的是$(notdir $@)的值;
            因為$@指的是規(guī)則的目標,所以就是$(OBJS),而$(OBJS)就是arch/arm/cpu/arm920t/start.o
            notdir內(nèi)嵌函數(shù)返回的文件名;所以返回start.o
            執(zhí)行makc -C arch/arm/cpu/arm920t start.o

            d.$(LIBBOARD)
            $(LIBBOARD): depend $(LIBS)
            $(MAKE) -C $(dir $(subst $(obj),,$@))
            執(zhí)行make -C board/samsung/smdk2410

            e.$(LIBS)
            $(LIBS): depend $(SUBDIR_TOOLS)
            $(MAKE) -C $(dir $(subst $(obj),,$@))
            進入到LIBS包含的很多目錄,執(zhí)行make,生成很多.a文件.

            f.$(LDSCRIPT)
            $(LDSCRIPT): depend
            $(MAKE) -C $(dir $@) $(notdir $@)
            在前面找鏈接腳本時已然知曉LDSCRIPT就是arch/arm/cpu/u-boot.lds
            執(zhí)行make -C arch/arm/cpu u-boot.lds 這個目錄沒有makefile,這什么意思?!!!

            g.$(obj)u-boot.lds
            $(obj)u-boot.lds: $(LDSCRIPT)
            $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@

            這些就是編譯uboot的規(guī)則,分析的比較粗糙,在移植的過程中肯定還會遇到各式各樣的問題,在移植過程中再進一步深入并修正.
            上一頁 1 2 3 4 下一頁

            關鍵詞: ARM匯編u-bootmakefilemkconfi

            評論


            相關推薦

            技術專區(qū)

            關閉