u-boot源碼配置原理分析 作者:楊碩,華清遠見嵌入式學(xué)院講師,。 u-boot的源代碼默認是不針對任何目標平臺的,當(dāng)我們要移植u-boot到一個特定的目標平臺時,,需要生成針對目標平臺的配置文件,。u-boot目前已經(jīng)支持的芯片可以在include/configs/下面找到。比如我們要編譯針對s3c2410芯片的u-boot.bin,,那么我們就需要在u-boot源碼根路徑下執(zhí)行: make smdk2410_config 這樣我們的u-boot源碼就是針對smdk2410平臺了,。(注:smdk2410是三星專門為 其arm9芯片s3c2410做的reference board,即參考板,,國內(nèi)大部分基于s3c2410的開發(fā)板都是參考smdk2410來做的) 那么,,make smdk2410_config背后到底了做了什么工作呢?u-boot是如何生成針對smdk2410平臺的配置的,?下面我們就來分析這一過程,。由于make命令會調(diào)用Makefile,所以我們要分析這個Makefile里面相關(guān)的部分,。 smdk2410_config是u-boot源碼根路徑下的Makefile的一個目標,相關(guān)的代碼如下: smdk2410_config : unconfig 在執(zhí)行make smdk2410_config的時候會先執(zhí)行unconfig目標,,負責(zé)清理掉以前的配置信息,。然后就會執(zhí)行@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0,MKCONFIG是Makefile的一個變量,,定義如下: MKCONFIG := $(SRCTREE)/mkconfig 可見,MKCONFIG就是源碼頂級目錄下的mkconfig文件,,這個文件是一個shell腳本程序,,所以在執(zhí)行make smdk2410_config的時候,系統(tǒng)就會執(zhí)行mkconfig這個腳本,,arm arm920t smdk2410 NULL s3c24x0則是傳遞個這個腳本的五個參數(shù)。 mkconfig這個腳本程序?qū)嶋H上就為我們生成了兩個文件,,一個是include/config.h,,另一個是include/config.mk。我們可以在make smdk2410_config之前看一下include下面是沒有這兩個文件的,。config.h里面只有一句話: /* Automatically generated - do not edit */ 其實就是為我們包含了目標平臺的配置頭文件。另一個文件config.mk里面則有如下內(nèi)容: ARCH = arm 其實這里面定義了四個變量,,分別是體系結(jié)構(gòu)(arm),、處理器核(arm920t),、目標板(smdk2410),、片上系統(tǒng)(s3c24x0),。 上面的這個include/config.mk文件會在Makefile里面被包含,對應(yīng)的代碼如下: ifeq ($(OBJTREE)/include/config.mk,$(wildcard $(OBJTREE)/include/config.mk)) # load ARCH, BOARD, and CPU configuration 也就是說,,Makefile會判斷include下面有沒有config.mk這個文件,,如果有就包含這個文件,,這就相當(dāng)于在Makefile里面定義了ARCH,、CPU,、BOARD和SOC這四個變量,。這樣u-boot就知道自己是針對哪個目標平臺的了。 在u-boot頂層目錄下面也有一個config.mk文件,,這個文件里面主要定義了交叉編譯器選項及編譯規(guī)則: # load other configuration 那么這個config.mk和include下的config.mk就包含了我們編譯u-boot時的所有信息,。其實關(guān)鍵就是include下的config.mk文件,,Makefile包含這個文件以后就知道目標平臺的信息了,。 |
|