uboot 編譯解析

1、makefile

MKCONFIG := $(srctree)/mkconfig
export MKCONFIG


%_config:: outputmakefile
@$(MKCONFIG) -A $(@:_config=)

#########################################################################
#   %代表着任意字符
#%_config目標後面是雙冒號,而我們平常看的只有一個冒號,這個就是makefile 的雙冒號規則了,
#而平常我們見的單冒號就是普通規則。Makefile 中規定:一個目標可以出現在多個規則中。
#但是這些規則必須是同一類型的規則,要麼都是普通規則,要麼都是雙冒號規則。
#而不允許一個目標同時出現在兩種不同類型的規則中。雙冒號規則和普通規則的處理的不同點表現在以下幾個方面:
#1. 雙冒號規則中,當依賴文件比目標更新時。規則將會被執行。對於一個沒有依賴而只有命令行的雙冒號規則,
#   當引用此目標時,規則的命令將會被無條件執行。而普通規則,當規則的目標文件存在時,
#   此規則的命令永遠不會被執行(目標文件永遠是最新的)。
#2. 當同一個文件作爲多個雙冒號規則的目標時。這些不同的規則會被獨立的處理,
#   而不是像普通規則那樣合併所有的依賴到一個目標文件。這就意味着對這些規則的處理就像多個不同
#   的普通規則一樣。就是說多個雙冒號規則中的每一個的依賴文件被改變之後,make只執行此規則定義的命令,
#   而其它的以這個文件作爲目標的雙冒號規則將不會被執行。
 
#@的作用是在執行這條命令的時候不進行顯示,$(MKCONFIG)是取變量MKCONFIG,
#由MKCONFIG := $(SRCTREE)/mkconfig這條語句知,就是當前目錄下的mkconfig文件,
#$(@:_config=)的意思是,講目標文件名字中含有的_config用等號後面的的字符替換掉,
#這裏=後面爲空,所以其效果就是把_config去掉
# 格式爲“$(VAR:A=B)”(或者“${VAR:A=B}”),意思是:替換變量“VAR”中所有“A”字符結尾的字爲“B”結尾的字。
#########################################################################

其實就是調用命令mkconfig -A am335x_evm

執行結果:

GEN     /home/fz/build/forlinx_uboot/Makefile
Configuring for am335x_evm - Board: am335x_evm, Options: SERIAL1,CONS_INDEX=1,EMMC_BOOT

outputmakefile就是在輸出目錄,生成一個makefile

mkconfig是一個shell腳本,最終的目的只用一個,根據boards.cfg文件裏與am335x_evm匹配的board行所提供的參數Target Architecture  CPU  Board [VENDOR] [SOC]來產生一個config.hconfig.mk

config.huboot源碼的頂層配置頭文件,它包括了對uboot產生影響的所有配置選項

config.mkmake提供了幾個變量,並根據boards.cfg中匹配行所提供的參數爲這幾個變量賦值,後面make將會用到的。


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