色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是什么意思

更多新聞>> 

主站蜘蛛池模板: 啊啊啊用力插视频 | 中文字幕有码在线 | WWW内射国产在线观看 | 久久国产精品麻豆 | 天堂亚洲国产中文在线 | 国产v综合v亚洲欧 | 成熟丰满熟妇XXXXX丰满 | 色屁屁WWW影院免费观看入口 | 亚洲国产日韩欧美综合A | 国产无吗视频 | 中国白胖bbw熟女多毛 | 亚洲乱亚洲乱少妇无码99P | 真人在线观看色网视频 | 男女猛烈无遮掩视频免费软件 | 男人j桶进女人p无遮挡免费的视频 | 成年无码AV片在线蜜芽 | 农村熟女大胆露脸自拍 | 久久久久久婷 | 亚洲a片成人无码av 手机黄色在线观看 | 中文字幕人妻伦伦 | 日韩AV东京社区男人的天堂 | 丰满少妇乱a片无码 | 国产精品WWW夜色视频 | 又湿又紧又大又爽A视频国产 | FREE性丰满HD毛多多 | 久久人人爽天天玩人人妻精品 | 少妇人妻av毛片在线看 | 亚洲av国产午夜精品一区二区 | 国产永久免费观看视频 | 日韩人妻无码精品专区综合网 | 成人无码av免费网站 | 精品一线二线三线区别在哪欧美 | 免费人成A片在线观看免费 性少妇freesexvideos强迫 | 国产黄网免费视频在线观看 | 欧美人与动牲猛交a欧美精品 | 少妇挑战3个黑人叫声凄惨 无码国产精品免费看 | 一级a毛片高清视频 | ASS鲜嫩鲜嫩年轻少妇PICS | 少妇厨房愉情理伦片免费 | 人妻巨大乳HD免费看 | 高潮喷水抽搐无码免费 |