/**
******************************************************************************
* @author ? ?Maoxiao Hu
* @version ? V1.0.0
* @date ? ? ? Dec-2014
******************************************************************************
* < COPYRIGHT 2014 ISE of SHANDONG UNIVERSITY >
*******************************************************************************
**/
?
Based on u-boot-2014-10.
config.mk的内容并不长,这里全部贴出来吧。
这里以已经执行完make trats_defconfig,在顶层目录已经生成了.config文件为例,说明config.mk中各变量的取值。
?
?15?PLATFORM_RELFLAGS?:=
?16?PLATFORM_CPPFLAGS?:=
?17?PLATFORM_LDFLAGS?:=
?18?LDFLAGS?:=
?19?LDFLAGS_FINAL?:=
?20?OBJCOPYFLAGS?:=
?21?#########################################################################
?22?
?23?ARCH?:=?$(CONFIG_SYS_ARCH:"%"=%)
?24?CPU?:=?$(CONFIG_SYS_CPU:"%"=%)
?25?BOARD?:=?$(CONFIG_SYS_BOARD:"%"=%)
?26?ifneq?($(CONFIG_SYS_VENDOR),)
?27?VENDOR?:=?$(CONFIG_SYS_VENDOR:"%"=%)
?28?endif
?29?ifneq?($(CONFIG_SYS_SOC),)
?30?SOC?:=?$(CONFIG_SYS_SOC:"%"=%)
?31?endif
?32?
?33?# Some architecture config.mk files need to know what CPUDIR is set to,
?34?# so calculate CPUDIR before including ARCH/SOC/CPU config.mk files.
?35?# Check if arch/$ARCH/cpu/$CPU exists, otherwise assume arch/$ARCH/cpu contains
?36?# CPU-specific code.
?37?CPUDIR=arch/$(ARCH)/cpu$(if?$(CPU),/$(CPU),)
?38?
?39?sinclude$(srctree)/arch/$(ARCH)/config.mk??# include architecture dependend rules
?40?sinclude$(srctree)/$(CPUDIR)/config.mk ? ??# include? CPU? specific rules
?41?
?42?ifdef?? SOC
?43?sinclude$(srctree)/$(CPUDIR)/$(SOC)/config.mk??# include? SoC? specific rules
?44?endif
?45?ifneq?($(BOARD),)
?46?ifdef?? VENDOR
?47?BOARDDIR?=?$(VENDOR)/$(BOARD)
?48?else
?49?BOARDDIR?=?$(BOARD)
?50?endif
?51?endif
?52?ifdef?? BOARD
?53?sinclude$(srctree)/board/$(BOARDDIR)/config.mk?# include board specific rules
?54?endif
?55?
?56?ifdef?FTRACE
?57?PLATFORM_CPPFLAGS?+= -finstrument-functions -DFTRACE
?58?endif
?59?
?60?#########################################################################
?61?
?62?RELFLAGS?:=?$(PLATFORM_RELFLAGS)
?63?
?64?OBJCOPYFLAGS?+= --gap-fill=0xff
?65?
?66?PLATFORM_CPPFLAGS?+=?$(RELFLAGS)
?67?PLATFORM_CPPFLAGS?+= -pipe
?68?
?69?LDFLAGS?+=?$(PLATFORM_LDFLAGS)
?70?LDFLAGS_FINAL?+= -Bstatic
?71?
?72?export PLATFORM_CPPFLAGS
?73?export RELFLAGS
?74?export LDFLAGS_FINAL
?75?export CONFIG_STANDALONE_LOAD_ADDR
?
?
config.mk被顶层Makefile包含,通过:
include$(srctree)/config.mk
这句话。
?
ARCH?:=?$(CONFIG_SYS_ARCH:"%"=%)
ARCH = “arm”
CPU?:=?$(CONFIG_SYS_CPU:"%"=%)
CPU = “armv7”
BOARD?:=?$(CONFIG_SYS_BOARD:"%"=%)
BOARD = “trats”
?
ifneq?($(CONFIG_SYS_VENDOR),)
?VENDOR?:=?$(CONFIG_SYS_VENDOR:"%"=%)
endif
在这里CONFIG_SYS_VENDOR = “samsung” 所以 VENDOR = “samsung”
?
ifneq?($(CONFIG_SYS_SOC),)
SOC?:=?$(CONFIG_SYS_SOC:"%"=%)
endif
在这里CONFIG_SYS_SOC = “exynos” 所以 SOC = “exynos”
?
CPUDIR=arch/$(ARCH)/cpu$(if?$(CPU),/$(CPU),)
替换已知变量:
CPUDIR=arch/arm/cpu/arm
?
sinclude$(srctree)/arch/$(ARCH)/config.mk??# include architecture dependend rules
sinclude$(srctree)/$(CPUDIR)/config.mk ? ??# include? CPU? specific rules
替换已知变量:
sinclude$(srctree)/arch/arm/config.mk??# include architecture dependend rules
sinclude$(srctree)/arch/arm/cpu/arm/config.mk ? ??# include? CPU? specific rules
?
?
?42?ifdef?? SOC
?43?sinclude$(srctree)/$(CPUDIR)/$(SOC)/config.mk??# include? SoC? specific rules
?44?endif
已定义SOC,替换已知变量:
?43?sinclude$(srctree)/arch/arm/cpu/arm/exynos/config.mk??# include? SoC? specific rules
?
?45?ifneq?($(BOARD),)
?46?ifdef?? VENDOR
?47?BOARDDIR?=?$(VENDOR)/$(BOARD)
?48?else
?49?BOARDDIR?=?$(BOARD)
?50?endif
?51?endif
BOARD变量不为空,且已定义VENDOR,替换已知变量:
?47?BOARDDIR?=?samsung/trats
?
?52?ifdef?? BOARD
?53?sinclude$(srctree)/board/$(BOARDDIR)/config.mk?# include board specific rules
?54?endif
已定义BOARD,替换已知变量:
?53?sinclude$(srctree)/board/samsung/trats/config.mk?# include board specific rules
?
其它编译选项就不做解释了。