亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人


U-Boot編譯過程詳解

分享到:
           

    早,DENX軟件工程中心的Wolfgang Denk基于8xxrom的源碼創建了PPCBOOT工程,并且不斷添加處理器的支持。后來,Sysgo Gmbh把PPCBOOT移植到ARM平臺上,創建了ARMBOOT工程。然后以PPCBOOT工程和ARMBOOT工程為基礎,創建了U-Boot工程。

    現在,U-Boot已經能夠支持PowerPC、ARM、X86、MIPS體系結構的上百種開發板,已經成為功能多、靈活性強并且開發積極的開放源碼Bootloader。U-Boot的源碼包可以從sourceforge網站下載,還可以訂閱該網站活躍的U-Boot Users郵件論壇,這個郵件論壇對于U-Boot的開發和使用都很有幫助。

    U-Boot軟件包下載網站://sourceforge.net/project/U-Boot。
    U-Boot郵件列表網站://lists.sourceforge.net/lists/listinfo/U-Boot-users/。
    DENX相關的網站://www.denx.de。

    解壓U-Boot-1.3.4.tar.bz2就可以得到全部U-Boot源程序。在頂層目錄下有18個子目錄,分別存放和管理不同的源程序。這些目錄中所要存放的文件有其規則,可以分為3類。

    ·與處理器體系結構或者開發板硬件直接相關。
    ·一些通用的函數或者驅動程序。
    ·U-Boot的應用程序、工具或者文件。

    表1.1列出了U-Boot頂層目錄下各級目錄的存放原則。

    表1.1 U-Boot的源碼頂層目錄說明

表1.1	U-Boot的源碼頂層目錄說明

    U-Boot的源代碼包含對幾十種處理器、數百種開發板的支持。可是對于特定的開發板,配置編譯過程只需要其中部分程序。這里具體以S3C2410處理器為例,具體分析S3C2410處理器和開發板所依賴的程序,以及U-Boot的通用函數和工具。

    U-Boot的源碼是通過gcc和Makefile組織編譯的。頂層目錄下的Makefile首先可以設置開發板的定義,然后遞歸地調用各級子目錄下的Makefile,后把編譯過的程序鏈接成U-Boot映像。

    (1)頂層目錄下的Makefile

    它負責U-Boot整體配置編譯。按照配置的順序閱讀其中關鍵的幾行。

    每一種開發板在Makefile都需要有板子配置的定義。例如,smdk2410開發板的定義如下。
    smdk2410_config :unconfig
        @./mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

    執行配置U-Boot的命令make smdk2410_config,通過./mkconfig腳本生成include/config.mk的配置文件。文件內容正是根據Makefile對開發板的配置生成的。

    ARCH = arm
    CPU = arm920t
    BOARD = smdk2410
    SoC = s3c24x0

    上面的include/config.mk文件定義了ARCH、CPU、BOARD、SoC這些變量。這樣硬件平臺依賴的目錄文件可以根據這些定義來確定。SMDK2410平臺相關目錄如下:

    ·board/smdk2410/
    ·cpu/arm920t/
    ·cpu/arm920t/s3c24x0/
    ·lib_arm/
    ·include/asm-arm/
    ·include/configs/smdk2410.h

    再回到頂層目錄的Makefile文件開始的部分,其中,下列幾行包含了這些變量的定義。

    # load ARCH, BOARD, and CPU configuration
    include include/config.mk
    export ARCH CPU BOARD VENDOR SoC

    Makefile的編譯選項和規則在頂層目錄的config.mk文件中定義。各種體系結構通用的規則直接在這個文件中定義。通過ARCH、CPU、BOARD、SoC等變量為不同硬件平臺定義不同選項。不同體系結構的規則分別包含在ppc_config.mk、arm_config.mk、mips_config.mk等文件中。

    頂層目錄的Makefile中還要定義交叉編譯器,以及編譯U-Boot所依賴的目標文件。

    ifeq ($(ARCH),arm)
    CROSS_COMPILE = arm-Linux-     # 交叉編譯器的前綴
    #endif
    export CROSS_COMPILE
    …
    # U-Boot objects...order is important (i.e. start must be first)
    OBJS = cpu/$(CPU)/start.o     # 處理器相關的目標文件
    …
    LIBS = lib_generic/libgeneric.a     #定義依賴的目錄,每個目錄下先把目標文件連接成*.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
    …

    然后還有U-Boot鏡像編譯的依賴關系。

    ALL = U-Boot.srec U-Boot.bin System.map
    all: $(ALL)
    U-Boot.srec: U-Boot
        $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@
    U-Boot.bin: U-Boot
        $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
    …
    U-Boot: depend $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)
        UNDEF_SYM='$(OBJDUMP) -x $(LIBS) \
        |sed -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
        $(LD) $(LDFLAGS) $$UNDEF_SYM $(OBJS) \
        --start-group $(LIBS) $(PLATFORM_LIBS) --end-group \
        -Map U-Boot.map -o U-Boot

    Makefile默認的編譯目標為all,包括U-Boot.srec、U-Boot.bin、System.map。U-Boot.srec和U-Boot.binU-Boot就是通過ld命令按照U-Boot.map地址表把目標文件組裝成U-Boot。其他Makefile內容就不再詳細分析了,上述代碼分析應該可以為閱讀代碼提供了一個線索。

    (1)開發板配置頭文件

    除了編譯過程Makefile以外,還要在程序中為開發板定義配置選項或者參數。這個頭文件是include/configs/.h。用相應的BOARD定義代替。

    這個頭文件中主要定義了兩類變量。

    一類是選項,前綴是CONFIG_,用來選擇處理器、設備接口、命令、屬性等。例如:

    #define    CONFIG_ARM920T    1
    #define    CONFIG_DRIVER_CS8900    1

    另一類是參數,前綴是CFG_,用來定義總線頻率、串口波特率、Flash地址等參數。例如:

    #define    CFG_Flash_BASE    0x00000000
    #define    CFG_PROMPT    "=>"

    根據對Makefile的分析,編譯分為兩步。第1步是配置,如make smdk2410_config;第2步是編譯,執行make就可以了。

    編譯完成后,可以得到U-Boot各種格式的映像文件和符號表,如表1.2所示。

    表1.2 U-Boot編譯生成的鏡像文件

表1.2	U-Boot編譯生成的鏡像文件

    U-Boot的3種映像格式都可以燒寫到Flash中,但需要看加載器能否識別這些格式。一般U-Boot.bin為常用,直接按照二進制格式下載,并且按照絕對地址燒寫到Flash中就可以了。U-Boot和U-Boot.srec格式映像都自帶定位信息。


   熱點鏈接:

   1、ARM處理器是什么
   2、FPGA從事的工作是什么
   3、北京嵌入式培訓哪好
   4、嵌入式培訓資料:搭建交叉編譯環境
   5、qq for android是什么意思

更多新聞>> 

主站蜘蛛池模板: 久久精品99精品免费观看 | 曰本女人牲交全视频免费毛片 | 日本一区二区成人教育 | 成人影音在线 | 亚洲第一网站免费视频 | www免费 | 黄色大片a级 | 欧美成人 一区二区三区 | 狠狠色噜噜狠狠狠狠999米奇 | 久久se精品一区精品二区 | 欧美成人高清 | 久久亚洲热 | 天天爱天天操 | 青青草影视 | 国产真实搭讪系列 | 九九精品99久久久香蕉 | 日本乱性| 久操资源在线 | 九热| 亚洲天堂网2014 | 在线观看亚洲人成网站 | 色吊丝国产永久免费网址 | 久久久全国免费视频 | 久久伊人在 | 国产精品日本不卡一区二区 | 国产一区二区在线观看视频 | 巨熟乳波霸若妻中文观看免费 | 久草免费福利 | 欧美大片在线欧美大片 | 久久精品美女久久 | 久久夜色精品国产亚洲噜噜 | 久久95| 亚洲国产精品婷婷久久久久 | 激情图片小说区 | 国产精品丝袜在线 | 秋霞网站一级一片 | 免费色黄网站 | 欧美成人手机在线 | 91久久人澡人人添人人爽 | 欧美成人免费丝袜视频在线观看 | 欧美高清在线精品一区二区不卡 |