Uboot顶层 config.mk 分析

    技术2022-07-11  88

    下面对uboot顶层目录下的配置文件config.mk文件进行分析

    config.mk源文件截图: config.mk源文件分析:

    26行: 判断编译输出目录(OBJTREE)和源码目录(SRCTREE)两个目录是否不相同,不相同则处理下面的命令。

    27~30行: 如果当前目录变量和源码目录变量相同,则dir赋值为空,否则,把CURDIR目录中的SRCTREE目录替换成空,即dir为$(CURDIR)去掉$(SRCTREE)的部分。

    Makefile中的字符串替换函数 subst 格式:

    $(subst < from >;,< to >;,< text >;)

    功能:把字串< text >;中的< from >;字符串替换成< to >;。

    返回:函数返回被替换过后的字符串。

    33行: 如果dir不为空(当前目录不是顶层目录),那么obj等于$(OBJTREE) $(dir)/,否则(当前目录是顶层目录)等于$(OBJTREE)/

    34行: 如果dir不为空(当前目录不是顶层目录),那么obj等于$(SRCTREE)/$(dir)/,否则(当前目录是顶层目录)等于$(SRCTREE)/

    36行: 创建obj目录。

    上面的代码,主要是针对用户自定义输出编译文件的目录设置的。


    config.mk源文件截图:

    config.mk源文件分析:

    63行前面的于arm无关,暂不分析。

    63行~70行也和arm没有关系,不分析。浪费感情。

    config.mk源文件截图: config.mk源文件分析:

    这些代码是和编译器相关的选项。(废话,别人又不是看不见)

    config.mk源文件截图: config.mk源文件分析:

    97行~107行:

    这是一个完整的arm编译工具链列表代号,后面的编译就使用这些符号。

    config.mk源文件截图: config.mk源文件分析:

    112行: 包含了一个autoconf.mk文件。这个文件也是配置时生成的。它里面是定义的变量,是条件编译的不同的配置值,原来匹配不同的配置项目(或者开发板)。

    它的生成是根据目录/include/config/xxx_sd.h(xxx_nand.h)等等文件的配置来生成的。根据这个.h文件里的宏定义生成autoconf.mk文件。这个.h文件对应一个开发板。移植一个uboot到一种开发板,必须配置这.h文件。    autoconf.mk 这个文件非常 重要

    115行: 包含了ARCH_config.mk,即arm_config.mk

    118行: CPU的config.mk

    121行: SOC的config.mk

    124~126行: 厂商和对应的开发板相关,具体的是(board/厂商名/开发板名称)这样的一个路径。

    129行: 包含这个路径下的这个config.mk配置文件,这个文件内容是一个链接地址,即:TEST_BASE=0Xxxxxxxxx。

    config.mk源文件截图: config.mk源文件分析:

    144~147行: 是否定义了CONFIG_NAND_U_BOOT(在上面提到的autoconf.mk中定义),链接脚本就选u-boot-nand.lds,否则就选u-boot.lds脚本。

    156行: TEXT_BASE,上面提到的链接地址,它是uboot在链接时必须指定的链接地址,注意是虚拟地址,它会对应一个物理地址。

    config.mk源文件截图: config.mk源文件分析:

    续待…

    Processed: 0.011, SQL: 9