u-boot源碼配置分析

make smdk2410_config

這樣我們的u-boot源碼就是針對smdk2410平臺了。(注:smdk2410是三星專門爲 其arm9芯片s3c2410做的reference board,即參考板,國內大部分基於s3c2410的開發板都是參考smdk2410來做的)

那麼,make smdk2410_config背後到底了做了什麼工作呢?u-boot是如何生成針對smdk2410平臺的配置的?下面我們就來分析這一過程。由於make命令會調用Makefile,所以我們要分析這個Makefile裏面相關的部分。

smdk2410_config是u-boot源碼根路徑下的Makefile的一個目標,相關的代碼如下:

smdk2410_config : unconfig
        @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
        unconfig:
        @rm -f $(obj)include/config.h $(obj)include/config.mk \
        $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp

在執行make smdk2410_config的時候會先執行unconfig目標,負責清理掉以前的配置信息。然後就會執行@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0,MKCONFIG是Makefile的一個變量,定義如下:

MKCONFIG := $(SRCTREE)/mkconfig

可見,MKCONFIG就是源碼頂級目錄下的mkconfig文件,這個文件是一個shell腳本程序,所以在執行make smdk2410_config的時候,系統就會執行mkconfig這個腳本,arm arm920t smdk2410 NULL s3c24x0則是傳遞個這個腳本的五個參數。

mkconfig這個腳本程序實際上就爲我們生成了兩個文件,一個是include/config.h,另一個是include/config.mk。我們可以在make smdk2410_config之前看一下include下面是沒有這兩個文件的。config.h裏面只有一句話:

/* Automatically generated - do not edit */
        #include <config/smdk2410.h>

其實就是爲我們包含了目標平臺的配置頭文件。另一個文件config.mk裏面則有如下內容:

ARCH = arm
        CPU = arm920t
        BOARD = smdk2410
        SOC = s3c24x0

其實這裏面定義了四個變量,分別是體系結構(arm)、處理器核(arm920t)、目標板(smdk2410)、片上系統(s3c24x0)。

上面的這個include/config.mk文件會在Makefile裏面被包含,對應的代碼如下:

ifeq ($(OBJTREE)/include/config.mk,$(wildcard $(OBJTREE)/include/config.mk))

# load ARCH, BOARD, and CPU configuration
        include $(OBJTREE)/include/config.mk
        export ARCH CPU BOARD VENDOR SOC

也就是說,Makefile會判斷include下面有沒有config.mk這個文件,如果有就包含這個文件,這就相當於在Makefile裏面定義了ARCH、CPU、BOARD和SOC這四個變量。這樣u-boot就知道自己是針對哪個目標平臺的了。

在u-boot頂層目錄下面也有一個config.mk文件,這個文件裏面主要定義了交叉編譯器選項及編譯規則:

# load other configuration
        include $(TOPDIR)/config.mk

那麼這個config.mk和include下的config.mk就包含了我們編譯u-boot時的所有信息。其實關鍵就是include下的config.mk文件,Makefile包含這個文件以後就知道目標平臺的信息了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章