U-boot移植之配置及編譯詳解 1
1.Uboot 的配置過程主要涉及四個檔案:
uboot/makefile
uboot/mkconfig
uboot/config.mk
uboot/board/samsung/smdkc110/u-boot.lds
2.基本的流程:
3.Makefile是整個編譯過程的總指揮,在配置階段指導配置檔案的生成,這些配置檔案直接和目標板子的資訊保持一致,生成與板子相匹配的配置檔案,在接下來的編譯過程直接被引用,呼叫,影響後面的編譯連結過程;在編譯連結階段指導核心的編譯連結,最終生成可以燒錄的檔案。
******************************************************************************/
/******************************************************************************
4.mkconfig是原始碼檔案本來就存在的,在Makefile中給它傳入了六個引數,這六個引數包括和我們的板子有關:架構資訊、cpu資訊、板子型號、賣家資訊、系統晶片資訊。
我們通過make+Makefile原始碼中的目標板子名字執行相應的目標,從而跳轉至mkconfig中去執行uboot配置過程當中最重要的連結指令碼。
具體的功能:
1.確定了開發板的一些名稱資訊,
2.建立了相關標頭檔案的連結。
3.建立了一個和板子巨集定義有關的配置標頭檔案:uboot/include/config.h
4.根據具體板子的資訊,在根目錄下建立config.mk檔案。
Makeconfig建立的符號連結:
1.在include目錄下建立asm檔案,指向asm-arm 43或48行
2.在include/asm-arm下建立一個arch檔案,指向include/asm-arm/arch-s5pc110 56行
3.在include目錄下建立一個reg.h檔案,指向include/s5pc110.h檔案 86行
4.在include/asm-arm下建立一個arch檔案,指向include/asm-arm/arch-s5pc11x (覆蓋 了2中的符號連結) 88行
5.在include目錄下建立了proc檔案,指向 include/asm-$2/procproc-armv 109
符號連結檔案是我們整個配置過程的核心,這些符號連結檔案(資料夾)的主要作用是給標頭檔案包含等過程提供指向性連結,使得uboot有可移植性。
uboot的移植原理:在uboot之中有很多彼此平行的程式碼,各自屬於各自不同的架構/CPU/開發板,我們在具體到某個開發板的編譯時用符號連線的方式提供一個具體名字的資料夾供編譯器使用。就可以在配置過程中通過配置使用不同的檔案,從而正確的包含正確的檔案。
config.mk檔案:
Uboot/config.mk檔案內打印出了一些和板子有關的資訊;
配置與板子資訊配置的的標頭檔案;
原始碼之中包含了很多不同版本板子的標頭檔案,通過mkconfig內程式碼的簡單判斷之後在include目錄下下建立一個config.h檔案,統一將對應板子的標頭檔案在/include/config.h中引用。
而這些眾多的標頭檔案在uboot/include/configs/目錄下,是我們移植是最重要的檔案,它涉及我們對開發板的巨集定義配置檔案。
例如:include/configs/smdkc110onenand.h是針對smdkc110onenand板子的標頭檔案。
這些/uboot/include/configs/*****.h>檔案會被用來生成一個autoconf.mk檔案,而這個生成的autoconf.mk檔案會被主Makefile引用,指導整個編譯過程,這裡面的巨集定義會影響我們對uboot中大部分.c檔案的條件編譯的選擇,從而實現可移植性。
****************************************************************************/
/*****************************************************************************
5.config.mk:位於uboot原始碼的根目錄下, 其包含了子目錄下許多同名的config.mk。所以千萬注意這些同名檔案的主次區別 。
Config.mk在主Makefile開頭中被引用,是Makefile中很重要的一部分。
Config.mk的配置過程也是需要原材料的,而所需的原材料在uboot/include/configs/xxx.h標頭檔案中。
主要職責:
(1)具體的設定交叉編譯工具連結(主Makefile中也有設定交叉編譯工具鏈)
(2)載入include/autoconfig.mk檔案(這個檔案是在主Makefile中生成的)
(3)指定-Ttext連結地址
(4)makefile的推導規則
*****************************************************************************/
/*************************************************************
6.uboot/board/samsung/smdkc110/u-boot.lds:整個uboot的總連線指令碼
在編譯廉潔過程主要靠此資料夾來指導操作,
聯結器將函式和全部變數識別為符號來進行連結。
其中連結器主要有兩個作用,一是將若干輸入檔案(.o檔案)根據一定規則合併為一個輸出檔案(例如ELF格式的可執行檔案);一是將符號與地址繫結(當然載入器也要完成這一部分工作)。連結器有一個編譯到其二進位制程式碼中的預設連結指令碼,大多數情況下使用它連結輸入檔案並生成目標檔案
我們也可以自己書寫合併規則,即自己寫連結指令碼。uboot更需要規則,因為涉及到重定位問題,重定位相關程式碼必須要放到前16KB之前。(此外,連結指令碼還可以自己定義自己的段實現按段排列順序執行程式,需原始碼有相關程式碼支援)
***************************************************************/