uboot的主Makefile中變數MKCONFIG中建立符號連結相關問題
在uboot的主Makefile中,定義了一個變數:MKCONFIG := $(SRCTREE)/mkconfig。
該MKCONFIG 變數即為源程式目錄下的mkconfig指令碼檔案,該檔案在uboot的前期配置操作時會用到。
x210_sd_config : unconfig
@$(MKCONFIG) $(@:_config=) arm s5pc11x x210 samsung s5pc110
@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk
這幾句程式碼就是在配置uboot時所做的操作,現予以說明:
1[email protected]$(MKCONFIG) $(@:_config=) arm s5pc11x x210 samsung s5pc110
這句表示將6個引數傳入MKCONFIG變數(即源程式目錄下的mkconfig指令碼檔案)中待用,6個引數分別為:
$1=x210_sd 注: $(@:_config=) ,這是第一個引數,[email protected]表示的是目標x210_sd_config, $(@:_config=) 這個符號的意思是將目標x210_sd_config中的“_config”部分用空代替作為第一個引數,即將x210_sd作為第一個引數。
$2=arm ,$3=s5pc11x,$4=x210 ,$5=samsung ,$6=s5pc110。
而源程式目錄下的mkconfig指令碼檔案中所做的事情為將這6個變數寫入./include目錄下的config.mk檔案中待用,其次就是建立了5個符號連結:
第一個:在include目錄下建立asm檔案,指向asm-arm
第二個:在inlcude/asm-arm下建立一個arch檔案,指向include/asm-arm/arch-s5pc110
第三個:在include目錄下建立regs.h檔案,指向include/s5pc110.h
第四個:刪除第二個符號連結,在inlcude/asm-arm下建立一個arch檔案,指向include/asm-arm/arch-s5pc11x
第五個:在include/asm-arm下建立一個proc檔案,指向include/asm-arm/proc-armv
為什麼要建立符號連結檔案呢?是為了在原始碼中進行標頭檔案包含,此時包含的是符號連結檔案,而不是真正的檔案,再由符號連線檔案指向真正要包含的標頭檔案。比如,在start.S檔案中有標頭檔案包含#include <asm/proc/domain.h>和#include <regs.h>,實際包含的標頭檔案是#include <asm-arm/proc-armv/domain.h>和#include <s5pc110.h>。
那麼為什麼要包含符號連結檔案而不直接包含呢?
是為了可移植性。當uboot移植到不同的硬體平臺時,包含標頭檔案的源程式是不用改的,只需要在建立符號連線時將符號連結檔案指向對應的檔案即可,這樣就實現了可移植性,使得uboot源程式和具體的硬體平臺分割開來,保持平臺無關性。
[email protected] "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk
將TEXT_BASE = 0xc3e00000這句話寫入(obj)board/samsung/x210/config.mk檔案中待用。