久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久


U-Boot編譯過程詳解

分享到:
           

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

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

    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就可以得到(dao)全部U-Boot源程序(xu)。在頂層目(mu)錄下有(you)18個子(zi)目(mu)錄,分別存放(fang)和(he)管(guan)理不同的源程序(xu)。這些(xie)目(mu)錄中所要存放(fang)的文件有(you)其規則,可以分為3類。

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

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

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

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

    U-Boot的(de)(de)源代碼包含對幾十(shi)種處(chu)理器、數(shu)百種開(kai)發(fa)板(ban)的(de)(de)支持。可是對于特(te)定的(de)(de)開(kai)發(fa)板(ban),配置編譯(yi)過程(cheng)(cheng)只需要(yao)其中部分程(cheng)(cheng)序。這里(li)具體(ti)以S3C2410處(chu)理器為例,具體(ti)分析S3C2410處(chu)理器和開(kai)發(fa)板(ban)所(suo)依賴的(de)(de)程(cheng)(cheng)序,以及(ji)U-Boot的(de)(de)通用函(han)數(shu)和工具。

    U-Boot的(de)源(yuan)碼是通過gcc和(he)Makefile組織編譯的(de)。頂層目錄下的(de)Makefile首先可以(yi)設置開發(fa)板的(de)定義,然后(hou)遞歸地(di)調用(yong)各級(ji)子目錄下的(de)Makefile,后(hou)把(ba)編譯過的(de)程序鏈接成(cheng)U-Boot映(ying)像。

    (1)頂層目錄(lu)下的Makefile

    它負(fu)責U-Boot整體配(pei)置編譯。按(an)照配(pei)置的(de)順(shun)序閱讀其中關鍵(jian)的(de)幾(ji)行。

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

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

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

    上面的(de)include/config.mk文件定義了(le)ARCH、CPU、BOARD、SoC這些變量。這樣硬件平(ping)臺(tai)依賴的(de)目(mu)錄文件可以根據(ju)這些定義來(lai)確(que)定。SMDK2410平(ping)臺(tai)相(xiang)關目(mu)錄如下(xia):

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

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

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

    Makefile的(de)編譯(yi)選(xuan)項和(he)規則在頂層(ceng)目錄的(de)config.mk文件(jian)(jian)中定(ding)義(yi)。各(ge)種體系(xi)結構(gou)通用的(de)規則直接在這個(ge)文件(jian)(jian)中定(ding)義(yi)。通過ARCH、CPU、BOARD、SoC等(deng)變量(liang)為(wei)不同(tong)硬件(jian)(jian)平臺定(ding)義(yi)不同(tong)選(xuan)項。不同(tong)體系(xi)結構(gou)的(de)規則分別包(bao)含(han)在ppc_config.mk、arm_config.mk、mips_config.mk等(deng)文件(jian)(jian)中。

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

    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鏡像編譯(yi)的依賴關系。

    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默認的編譯目標為(wei)(wei)all,包括U-Boot.srec、U-Boot.bin、System.map。U-Boot.srec和(he)U-Boot.binU-Boot就(jiu)是通過(guo)ld命令按照U-Boot.map地址表把目標文件組裝(zhuang)成U-Boot。其他Makefile內(nei)容就(jiu)不再詳細分析了(le),上述(shu)代碼(ma)分析應該可(ke)以為(wei)(wei)閱讀代碼(ma)提供了(le)一(yi)個線索。

    (1)開發板配置頭文件(jian)

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

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

 &nbsp;  一(yi)類是選項,前綴是CONFIG_,用來選擇(ze)處理(li)器、設備接口、命令、屬性等(deng)。例(li)如:

    #define    CONFIG_ARM920T    1
    #define    CONFIG_DRIVER_CS8900    1

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

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

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

    編譯完成后(hou),可以得到U-Boot各(ge)種(zhong)格式的映像文(wen)件和符號(hao)表(biao),如表(biao)1.2所示(shi)。

 &nbsp;  表1.2 U-Boot編譯(yi)生成(cheng)的鏡像文件(jian)

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

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


   熱點鏈接(jie):

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

更多新聞>>