天天看點

uboot建構架構1-總覽

uboot版本:2016.03

開發闆:米爾科技imx6ull單闆機

編譯器:arm-poky-linux-gnueabi-gcc,version5.3.0。由yocto SDK編譯生成。

編譯器的安裝和生效,請參考米爾開發闆的手冊。安裝完編譯器之後,我們source一下環境即可:

source environment-setup-cortexa7hf-neon-poky-linux-gnueabi
           

至此,環境變量裡面就設定了一些主要變量,我們列出幾個最為重要的變量:

CC=arm-poky-linux-gnueabi-gcc  -march=armv7ve -marm -mfpu=neon  -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/home/sunke/work/fslImageQt5Sdk/sysroots/cortexa7hf-neon-poky-linux-gnueabi
ARCH=arm
RANLIB=arm-poky-linux-gnueabi-ranlib
OBJCOPY=arm-poky-linux-gnueabi-objcopy
LD=arm-poky-linux-gnueabi-ld  --sysroot=/home/sunke/work/fslImageQt5Sdk/sysroots/cortexa7hf-neon-poky-linux-gnueabi
PWD=/home/sunke/work/MYiR-iMX-uboot
STRIP=arm-poky-linux-gnueabi-strip
           

這樣,CC指定為我們使用的交叉編譯器,體系結構ARCH指定為arm。

根據米爾科技提供的說明手冊,編譯uboot使用如下幾個指令:

[email protected]:~/work/MYiR-iMX-Uboot$ make distclean

[email protected]:~/work/MYiR-iMX-Uboot$ make mys_imx6ull_14x14_nand_defconfig

[email protected]:~/work/MYiR-iMX-Uboot$ make

最後會編譯生成u-boot.imx,u-boot.bin等檔案,u-boot.imx可以用來燒寫nandflash。

以上指令看起來非常簡潔,第一個和第三個基本上不用過多解釋,學過make腳本的都會比較清楚。那麼第二個指令主要做了什麼事情呢?第二個指令産生的結果又是怎麼樣的?帶着這些問題,我們來深入挖掘一下uboot的建構架構。

以上三個指令是米爾手冊裡面提供的編譯指令,實際上,我們也清楚,編譯uboot、kernel之前可以進行配置,我們熟悉的一個配置指令是:

[email protected]:~/work/MYiR-iMX-Uboot$ make menuconfig

這條指令會打開一個簡易的圖形配置界面,大體形态如下:

uboot建構架構1-總覽

在這個配置界面中,可以根據自己的需要,對各種選項進行配置。配置完成之後,會生成一個配置檔案,最終make的時候,會根據這個配置檔案來選擇編譯哪些檔案以及打開關閉哪些特性。至于這裡面的具體細節,後面會進行詳細分析。

還有一個比較重要的指令是:

[email protected]:~/work/MYiR-iMX-Uboot$ make help

該指令可以檢視所有的幫助資訊。說來也正常,沒有這麼一個幫助資訊,誰能記得住那麼多指令功能。該指令輸出大緻如下:

uboot建構架構1-總覽

這裡面看起來指令衆多,但我們不一一分析,因為當我們把幾個主要的指令了解之後,剩下的很容易舉一反三,自己看看就會了。是以,接下來我們需要深入分析以下幾個方面的内容,可以按順序閱讀:

(1)kbuild架構簡要分析;

(2)make menuconfig指令的過程追蹤;

(3)make *defconfig指令的過程追蹤;

(4)配置檔案和make過程是如何聯系起來的;

(5)u-boot.bin生成過程追蹤;

(6)u-boot.imx生成過程追蹤;

(7)built-in.o的編譯過程追蹤;

(8)目标檔案(.o)的編譯過程追蹤;

(9)make distclean指令的過程追蹤;