u-boot配置/編譯過程

來源:互聯網
上載者:User

標籤:

1. u-boot配置過程

    make xxx.config

   MKCONFIG    := $(SRCTREE)/mkconfig
   export MKCONFIG

 -----》》執行mkconfig

    1).確定開發板名稱BOARD_NAME .

      CONFIG_NAME="${1%_config}"
      [ "${BOARD_NAME}" ] || BOARD_NAME="${1%_config}"

    2).建立到平台/開發板相關的標頭檔的連結

      ln -s ${LNPREFIX}arch-${soc} asm/arch

        ln -s ${LNPREFIX}proc-armv asm/proc

    3).建立頂層Makefile包含的檔案include/config.mk

          [ "${vendor}" ] && echo "VENDOR = ${vendor}"
          [ "${soc}"    ] && echo "SOC    = ${soc}"
           exit 0 ) > config.mk

    4).建立開發板板相關的標頭檔include/config.h

           > config.h        # Create new config file

2.u-boot編譯、串連過程

  1).包含了配置過程中製作出來的config.mk檔案,其中定義了ARCH,CPU,BOARD,SOC...

    # load ARCH, BOARD, and CPU configuration
    include $(obj)include/config.mk//作出來的config.mk
    export    ARCH CPU BOARD VENDOR SOC DDR3LIB DDRTYPE   

      # load other configuration
      include $(TOPDIR)/config.mk //包含頂層的config.mk 確定了編譯器.編譯選項 BOARDDIR LDFLAGS

      config.mk中定義了TEXT_BASE (uboot開始位置)  

    把所有的OBJS 。LIBS所表示的.o,.a檔案產生

  # U-Boot objects....order is important (i.e. start must be first)
    OBJS  = $(CPUDIR)/start.o

    .......

    LIBS-y += lib/libgeneric.o
    LIBS-y += lib/lzma/liblzma.o
    LIBS-y += lib/lzo/liblzo.o
    LIBS-y += lib/zlib/libz.o

    

    得到ELF格式的u-boot ,最後轉換為二進位格式U-BOOT.bin   LDFLAGS確定串連方式

    UNDEF_LST=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | \
        sed  -n -e ‘s/.*\($(SYM_PREFIX)_u_boot_list_.*\)/-u\1/p‘|sort|uniq`;\
        cd $(LNDIR) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) \
            $$UNDEF_LST $(__OBJS) \
            --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
            -Map u-boot.map -o u-boot

  在u-boot.lds 代碼中 (指定各種段)

  SECTIONS
{
 . = 0x00000000;
 . = ALIGN(4);
 .text :
 {
  __image_copy_start = .;
  arch/arm/cpu/armv7/start.o (.text*)////start.S為uboot入口
  *(.text*)
 }
 . = ALIGN(4);

3.總結uboot 編譯流程:

          (1)首先編譯start.S

          (2)對於平台/開發板相關的每個目錄,通用目錄都使用它們各自的Makefile產生相應的庫 .a .o

          (3)將產生的.a .o ,檔案按照comfig.mk檔案中指定的程式碼片段起始地址. u-boot.lds串連指令碼進行串連

          (4)上一步,得到ELF格式UBOOT,Makefie會把其轉換為二進位格式

u-boot配置/編譯過程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.