uboot 2013 07 makefile条件编译 -y 的原理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档