uboot之makefile学习(配置)

来源:互联网 发布:阿里巴巴询盘软件 编辑:程序博客网 时间:2024/06/05 15:33

之前学习了mkconfig这个脚本,它主要是解析生成下面config.h、config.mk。mk文件主要是arch、cpu、soc等信息,config下面主要是包含了一些重要信息:

#define CONFIG_BOARDDIR board/$BOARDDIR
#include <config_cmd_defaults.h>
#include <config_defaults.h>
#include <configs/${CONFIG_NAME}.h>
#include <asm/config.h>

第一个是单板的位置信息,第二和第三都是系统默认信息 ,然后是configs下面的config信息,这个就是单板的配置信息,另外就是asm下config信息。这个asm是个软链接,链接到${SRCTREE}/arch/${arch}/include/asm 这个配置是跟处理器相关的配置信息。另外我们注意到这里:$(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 $@

昨天分析了下配置的生成是在这里面完成的,但是好像这里并没有直接使用之前mkconfig生成的那个config.h,而是包含了include/common.h。进去common.h里面发现已经包含了那个config.h。这样我们间接地包含了config.h。接下来就是这个宏是怎么产生的? 这里使用了一个gcc的技巧,也就是只做预处理并不完成整个编译动作。这里使用了-dM这个选项。但是我在实验的时候这个还不好用,需要再加一个-E选项。加了这些选项之后,编译的时候告诉编译器只做预处理,并且把相关的宏定义输出来,在这里把宏定义输出到了sed脚本中。这里有一点疑问,上面的动作是发生在源代码的include目录下的。如果输出obj目录没有指定的话这个是不会有问题的。但是如果obj目录跟源代码目录不一致,那么common.h在编译的时候怎么包含config.h这个文件?在obj的include目录下是没有configs以及config_defaults.h、conf_cmd_default.h,是不是就是说只能在源码的下面进行编译?

通过上述分析发现,配置相关的文件只有两个地方:一个是跟arch相关的,一般都不要管理,如果不是自己新增arch的话;另外一个就是源代码include下面configs的单板配置信息.h文件。单板的配置信息都在这个文件里面定义,平时改的基本上是这个文件。在uboot看来只有这几个文件了,实际上可能比这个还要复杂点,但不管怎么样,可以通过在单板配置文件里面通过include 别的配置文件来实现。具体例子实现例子可以参考amcc_common.h的做法,实现重复利用的目的。


本文转载自CSDN,原文地址:http://blog.csdn.net/alloc7/article/details/6792023

原创粉丝点击