色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_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是什么意思

更多新聞>> 

主站蜘蛛池模板: 特级西西人体444WWw高清大胆 | 美女裸体色黄污视频网站 | 久久这里只有精品视频9 | 国内揄拍国内精品人妻浪潮AV | 强伦姧人妻三上悠亚中文字幕 | 免费又色又爽又黄的舒服软件 | 猫咪www免费人成网站无码 | 亚洲成a人片在线观看视频 欧洲日韩在线 | 亚洲gay片男同网站 十八禁视频在线观看免费无码无遮挡骂过 | 男人的天堂视频网站 | 久久九九日本韩国精品 | 老司机精品线观看视频 | 黄在线观看网站 | 99在线精品一区二区三区 | 西西人体自慰扒开下部93 | 国产乱子伦无套一区二区三区 | 好男人日本社区www 国产成人无码区免费内射一片色欲 | 影音先锋人妻每日资源站 | 精品自拍亚洲一区在线 | 日本乱妇乱子视频网站-百度 | 成在线人免费无码高潮喷水 | 日本三级韩国三级人妻 | 亚洲国产v高清在线观看 | 蜜桃久久久久久 | 欧美视频在线观看一区二区 | 呦系列视频一区二区三区 | 天天躁日日躁狠狠躁日日躁 | 四虎影视WWW在线播放 | 美国人性欧美XXXX | 美女裸体无遮挡免费视频网站 | 国产亚洲一区二区在线 | 999福利视频| 亚洲国产国语自产精品 | 18禁黄久久久AAA片广濑美月 | 国产精品福利视频萌白酱 | 欧美激烈精交gif动态图 | 精品久久久久久中文字幕人妻最新 | 少妇厨房愉情理伦片BD在线观看 | 日韩人妻无码精品一专区 | 国产一级午夜 | 又大又湿又紧又爽a视频 |