例如:
make s3c2440_config
這條指令實際上是指向了壹條更長的指令
這條指令在uboot根目錄下的makefile中自己定義的,跟妳的開發板相關;
s3c2440_config:unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t s3c2440 NULL s3c24x0
這條指令指向的執行文件是MKCONFIG
通過閱讀MKCONFIG 文件源碼我們可以看出。MKCONFIG有如下作用
第壹:確定開發板的名字就是BOARD_NAME
-n) shift ; BOARD_NAME =" ${1%%_config}";shift;;
第二:創建到平臺/開發板的頭文件的鏈接
ln -s asm-$2 asm
$2 便是我們第壹條指令傳遞出來的arm,
還有如下代碼
ln -s ${LNPREFIX}arch-$6 asm-$2/arch
這樣s3c24x0也發揮作用了。
第三:創建頂層Makefile包含的文件include/config.mk
第四:創建開發板相關的頭文件 include/config.h
在config.h這個文件裏,存放的是開發板的配置信息。
只有以下兩類宏
(1)壹類是選項CONFIG開頭,用來選擇CPU,SOC,開發板類型,設置系統時鐘,選擇設備驅動
(2)另壹類是參數 用CFG來開頭,如設置malloc緩沖池的大小,U-boot的提示符,u-boot下載文件的默認加載地址,flash的起始地址。
開發板的第壹個參數,將編譯文件分別指向了/board/$board_name and cpu/$cpu/
所以才會產生如下的編譯結果。
(1)首先編譯/board/$board_name/start.S,對於不同的CPU,還可能編譯cpu/$(CPU)下的其他文件。
(2)然後,對於平臺/開發板相關的每個目錄、每個通用目錄都使用它們各自的Makefile生成相應的庫。
(3)將1,2步驟生成的.o、.a文件安裝board/$(BOARDDDIR)/U-boot.lds連接腳本進行連接。
(4)第3步得到的是ELF格式的u-boot,後面Makefile還會將它轉換為二進制格式,s_Record格式。