• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > ARM編譯器介紹

    ARM編譯器介紹

    作者: 時間:2012-03-04 來源:網絡 收藏


    本文引用地址:http://www.czjhyjcfj.com/article/149526.htm


    mkconfig腳本文件的執行至此結束,繼續分析Makefile剩下部分。

    3)包含include/config.mk,其實也就相當于在Makefile里定義了上面四個變量而已。

    4) 指定交叉前綴:

    ifeq ($(ARCH),arm)#這里根據ARCH變量,指定前綴。
    CROSS_COMPILE = arm-linux-
    endif

    5)包含config.mk:

    #包含頂層目錄下的config.mk,這個文件里面主要定義了交叉及選項和編譯規則
    # load other configuration
    include $(TOPDIR)/config.mk

    下面分析config.mk的內容:

       @包含體系,開發板,CPU特定的規則文件:

    ifdefARCH #指定預編譯體系結構選項
    sinclude $(TOPDIR)/$(ARCH)_config.mk# include architecture dependend rules
    endif
    ifdefCPU #定義編譯時對齊,浮點等選項
    sinclude $(TOPDIR)/cpu/$(CPU)/config.mk# include CPUspecific rules
    endif
    ifdefSOC #沒有這個文件
    sinclude $(TOPDIR)/cpu/$(CPU)/$(SOC)/config.mk# include SoCspecific rules
    endif

    ifdefBOARD #指定特定板子的鏡像連接時的內存基地址,重要!
    sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk# include board specific rules
    endif

    @定義交叉編譯鏈工具


    # Include the make variables (CC, etc...)
    #
    AS= $(CROSS_COMPILE)as
    LD= $(CROSS_COMPILE)ld
    CC= $(CROSS_COMPILE)gcc
    CPP= $(CC) -E
    AR= $(CROSS_COMPILE)ar
    NM= $(CROSS_COMPILE)nm
    STRIP= $(CROSS_COMPILE)strip
    OBJCOPY = $(CROSS_COMPILE)objcopy
    OBJDUMP = $(CROSS_COMPILE)objdump
    RANLIB= $(CROSS_COMPILE)RANLIB

    @定義AR選項ARFLAGS,調試選項DBGFLAGS,優化選項OPTFLAGS

     預處理選項CPPFLAGS,C編譯器選項CFLAGS,連接選項LDFLAGS

     LDFLAGS += -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS) #指定了起始地址TEXT_BASE

    @指定編譯規則:

    $(obj)%.s:%.S
    $(CPP) $(AFLAGS) -o $@ $
    $(obj)%.%.S
    $(CC) $(AFLAGS) -c -o $@ $
    $(obj)%.%.c
    $(CC) $(CFLAGS) -c -o $@ $

    回到頂層makefile文件:

    6)U-boot需要的目標文件。

    OBJS = cpu/$(CPU)/start.o # 順序很重要,start.o必須放第一位

    7)需要的庫文件:

    LIBS = lib_generic/libgeneric.a
    LIBS += board/$(BOARDDIR)/lib$(BOARD).a
    LIBS += cpu/$(CPU)/lib$(CPU).a
    ifdef SOC
    LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a
    endif
    LIBS += lib_$(ARCH)/lib$(ARCH).a
    LIBS += fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a
    fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a
    LIBS += net/libnet.a
    LIBS += disk/libdisk.a
    LIBS += rtc/librtc.a
    LIBS += dtt/libdtt.a
    LIBS += drivers/libdrivers.a
    LIBS += drivers/nand/libnand.a
    LIBS += drivers/nand_legacy/libnand_legacy.a
    LIBS += drivers/sk98lin/libsk98lin.a
    LIBS += post/libpost.a post/cpu/libcpu.a
    LIBS += common/libcommon.a
    LIBS += $(BOARDLIBS)

    LIBS := $(addprefix $(obj),$(LIBS))
    .PHONY : $(LIBS)

    根據上面的include/config.mk文件定義的ARCH、CPU、BOARD、SOC這些變量。硬件平臺依賴的目錄文件可以根據這些定義來確定。SMDK2410平臺相關目錄及對應生成的庫文件如下。
    board/smdk2410/ :庫文件board/smdk2410/libsmdk2410.a
    cpu/arm920t/ :庫文件cpu/arm920t/libarm920t.a
    cpu/arm920t/s3c24x0/ :庫文件cpu/arm920t/s3c24x0/libs3c24x0.a
    lib_arm/ :庫文件lib_arm/libarm.a
    include/asm-arm/ :下面兩個是頭文件。
    include/configs/smdk2410.h

    8)最終生成的各種鏡像文件:

    ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)

    all:$(ALL)

    $(obj)u-boot.hex:$(obj)u-boot
    $(OBJCOPY) ${OBJCFLAGS} -O ihex $ $@

    $(obj)u-boot.srec:$(obj)u-boot
    $(OBJCOPY) ${OBJCFLAGS} -O srec $ $@

    $(obj)u-boot.bin:$(obj)u-boot
    $(OBJCOPY) ${OBJCFLAGS} -O binary $ $@

    linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

    linux相關文章:linux教程




    關鍵詞: 介紹 編譯器 ARM

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 大化| 同仁县| 博乐市| 阿克苏市| 望谟县| 颍上县| 台州市| 宽甸| 潼南县| 巴中市| 泉州市| 靖宇县| 松潘县| 庄河市| 米脂县| 施秉县| 阳新县| 施秉县| 浦北县| 韩城市| 鄂托克旗| 虎林市| 阜南县| 大兴区| 佳木斯市| 广宗县| 兴海县| 九寨沟县| 邛崃市| 西丰县| 商南县| 莲花县| 湾仔区| 长沙市| 桃园县| 肇东市| 海原县| 祁连县| 海原县| 西青区| 青海省|