1、–y的出现
分析Makefile时,看到各种–y ,Makefile 用-y的形式包含需要的文件,例如:
ALL-$(CONFIG_NAND_U_BOOT) += $(obj)u-boot-nand.bin,当CONFIG_NAND_U_BOOT为y时,就包括u-boot-nand.bin文件
–y 是如果转换来的呢?直接赋值?no!下面分析其前世今生
2、–y的产生
版本: uboot 2013 07
Board: u-boot-2013.07\board\friendlyarm\mini2440\
2.1 make mini2440_config
跳到Makefile中的 %_config:: unconfig @$(MKCONFIG) -A $(@:_config=)
主要执行MKCONFIG(顶层mkconfig文件)脚本,此文件在include目录下创建了两个文件:config.h和config.mk 。
(1)Config.h中指明了板子相关的配置头文件(内容不多,但很重要) /* Automatically generated - do not edit */ #define CONFIG_SYS_ARCH "arm" #define CONFIG_SYS_CPU "arm920t" #define CONFIG_SYS_BOARD "mini2440" #define CONFIG_SYS_VENDOR "friendlyarm" #define CONFIG_SYS_SOC "s3c24x0"
#define CONFIG_BOARDDIR board/friendlyarm/mini2440 #include <config_cmd_defaults.h> #include <config_defaults.h> #include <configs/mini2440.h> #include <asm/config.h> #include <config_fallbacks.h> #include <config_uncmd_spl.h>
(2)config.mk包含了cpu体系结构和板子名称
2.2 make
跳到Makefile中的 all,因为依赖等关系,需要创建autoconfig.mk,于是跳到 $(obj)include/autoconf.mk: $(obj)include/config.h @$(XECHO) Generating $@ \ set -e \ : Extract the config macros \ $(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | \ sed -n -f tools/scripts/define2mk.sed > $@.tmp && \ mv $@.tmp $@
主要是根据2.1生成的include/config.h ,include/common.h及他们包含的头文件,利用define2mk.sed脚本,处理这些头文件中的宏部分,生成一个整体的可被此主Makefil识别的autoconfi.mk文件。autoconfi.mk里面就出现了–y CONFIG_BOOTM_NETBSD=y
CONFIG_BOARD_EARLY_INIT_F=y CONFIG_SYS_CLK_FREQ=12000000 CONFIG_CMD_ITEST=y CONFIG_CMD_PORTIO=y CONFIG_CMD_EDITENV=y CONFIG_CMD_CRC32=y ……
-y生成的规则是:define2mk.sed原文中说明: # Change '1' and empty values to "y" (not perfect, but # supports conditional compilation in the makefiles 把定义为1或空的宏值转成y,这就是y的成因! 值得注意的是define2mk.sed原文: # ... and from configs defined from other configs s/="\(CONFIG_[A-Za-z0-9_][A-Za-z0-9_]*\)"/=$(\1)/; 这些需要转换的宏,必须是CONFIG_开头的
2.3 在common/下做试验
3)在include/config.h所包含的任意头文件中,我选include/configs/mini2440.h添加 #define CONFIG_TEST _MAKEFILE _Y 或者 #define CONFIG_TEST _MAKEFILE _Y 1 4)make
出现了test _makefile_y.o ,说明CONFIG_TEST _MAKEFILE _Y转换成了y
分析Makefile时,看到各种–y ,Makefile 用-y的形式包含需要的文件,例如:
ALL-$(CONFIG_NAND_U_BOOT) += $(obj)u-boot-nand.bin,当CONFIG_NAND_U_BOOT为y时,就包括u-boot-nand.bin文件
–y 是如果转换来的呢?直接赋值?no!下面分析其前世今生
2、–y的产生
版本: uboot 2013 07
Board: u-boot-2013.07\board\friendlyarm\mini2440\
2.1 make mini2440_config
跳到Makefile中的 %_config:: unconfig @$(MKCONFIG) -A $(@:_config=)
主要执行MKCONFIG(顶层mkconfig文件)脚本,此文件在include目录下创建了两个文件:config.h和config.mk 。
(1)Config.h中指明了板子相关的配置头文件(内容不多,但很重要) /* Automatically generated - do not edit */ #define CONFIG_SYS_ARCH "arm" #define CONFIG_SYS_CPU "arm920t" #define CONFIG_SYS_BOARD "mini2440" #define CONFIG_SYS_VENDOR "friendlyarm" #define CONFIG_SYS_SOC "s3c24x0"
#define CONFIG_BOARDDIR board/friendlyarm/mini2440 #include <config_cmd_defaults.h> #include <config_defaults.h> #include <configs/mini2440.h> #include <asm/config.h> #include <config_fallbacks.h> #include <config_uncmd_spl.h>
(2)config.mk包含了cpu体系结构和板子名称
2.2 make
跳到Makefile中的 all,因为依赖等关系,需要创建autoconfig.mk,于是跳到 $(obj)include/autoconf.mk: $(obj)include/config.h @$(XECHO) Generating $@ \ set -e \ : Extract the config macros \ $(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | \ sed -n -f tools/scripts/define2mk.sed > $@.tmp && \ mv $@.tmp $@
主要是根据2.1生成的include/config.h ,include/common.h及他们包含的头文件,利用define2mk.sed脚本,处理这些头文件中的宏部分,生成一个整体的可被此主Makefil识别的autoconfi.mk文件。autoconfi.mk里面就出现了–y CONFIG_BOOTM_NETBSD=y
CONFIG_BOARD_EARLY_INIT_F=y CONFIG_SYS_CLK_FREQ=12000000 CONFIG_CMD_ITEST=y CONFIG_CMD_PORTIO=y CONFIG_CMD_EDITENV=y CONFIG_CMD_CRC32=y ……
-y生成的规则是:define2mk.sed原文中说明: # Change '1' and empty values to "y" (not perfect, but # supports conditional compilation in the makefiles 把定义为1或空的宏值转成y,这就是y的成因! 值得注意的是define2mk.sed原文: # ... and from configs defined from other configs s/="\(CONFIG_[A-Za-z0-9_][A-Za-z0-9_]*\)"/=$(\1)/; 这些需要转换的宏,必须是CONFIG_开头的
2.3 在common/下做试验
1)创建test _makefile_y.c文件,内容随意,只要编译得过
2)在当前目录的Makefile 中添加:
COBJS-$(CONFIG_TEST _MAKEFILE_Y) += test _makefile_y.o3)在include/config.h所包含的任意头文件中,我选include/configs/mini2440.h添加 #define CONFIG_TEST _MAKEFILE _Y 或者 #define CONFIG_TEST _MAKEFILE _Y 1 4)make
出现了test _makefile_y.o ,说明CONFIG_TEST _MAKEFILE _Y转换成了y