uboot 2013 07 makefile条件编译 -y 的原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
makefile条件编译-y 的原理
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
#include
#include
#include
#include
#include
(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.o
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
本文仅供参考,如有疑义,请联系本人
ruigeyun