UBOOT中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 <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.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
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值