U-Boot的配置、編譯、連接過程

         U-Boot,全稱爲Universal Boot Loader,即通用Bootloader。通用有兩層含義:可以引導多種操作系統、支持多種架構的CPU。
 
         根據U-Boot源碼文件夾頂層的Readme文件說明,針對使用的開發板 board/<board_name>,執行:
         1、make  <board_name>_config  
         2、make  all
可以生成以下三個文件:
         1、U-Boot.bin:二進制可執行文件,可以直接燒入ROM、NOR Flash;
         2、U-Boot:ELF格式的可執行文件;
         3、U-Boot.srec:Motoroal S-Record格式的可執行文件。
        
         通過分析頂層Makefile和mkconfig兩個文件,配置簡述過程如下:
         make <board_name>_config 相當於執行 ./mkconfig <board_name> $2 $3 $4 $5 $6
         1、創建到平臺/開發板相關的頭文件的鏈接:
                ln -s asm-$2 asm
                ln -s arch-$6 asm-$2/arch
                ln -s proc-armv asm-$2/proc               //如果$2不是arm的話,此行沒有
         2、創建頂層Makefile包含的文件include/config.mk:
                ARCH =$2
                CPU = $3
                BOARD = $4
                VENDOR = $5
                SOC = $6
         3、創建開發板相關的頭文件include/config.h:
                #include <configs/<board_name>.h>
對於一個拿到手的板子,查看其各個器件型號後,要在board目錄下新建一個開發板<board_name>的目錄,同時要在include/configs下新建一個頭文件<board_name>.h,裏面存放的就是開發板的相關配置信息。其中主要包括了一下兩類宏:
          1、選項(Options),前綴爲"CONFIG_",用於選擇CPU、SOC、開發板,設置系統時鐘,選擇設備驅動等;
          2、參數(Setting),前綴爲"CFG_",用於設置malloc緩衝池的大小、U-Boot的提示符、U-Boot下載文件時的默認加載地址、Flash的起始地址等。
         U-Boot在編譯、連接過程中,幾乎每個文件都被編譯和連接了,由宏開關來決定哪些代碼是有效的。
 
         總結U-Boot的編譯流程如下:
         1、首先,編譯cpu/$(CPU)/start.S,對於不同的CPU,還有可能編譯cpu/$(CPU)下的其他文件;
         2、然後,對於平臺/開發板相關的每個目錄,每個通用目錄都使用各自的Makefile生成相應的庫;
         3、將1、2步驟生成的.o、.a文件按照board/$(BOARDDIR)/config.mk文件中制定的代碼起始地址、board/$(BOARDDIR)/U-Boot.lds連接腳本進行連接;
         4、第3步得到的是ELF格式的U-Boot, 之後Makefile還會將它轉換爲二進制格式、S-Record格式。
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章