Uboot主目录下的Makefile分析

本文是针对Uboot1.3.4 for x210来分析的,学习总结之余,也供大家参详!!!

uboot version确定(24~29)

  • VERSION:主版本号
  • PATCHLEVEL:次版本号
  • SUBLEVEL:再次版本号
  • EXTRAVERSION:另外附加的版本信息

    include/version_autogenerated.h文件是编译过程中自动生成的一个文件,里面的内容就是我们在Makefile中配置的uboot的版本号

HOSTARCH和HOSTOS(31~41)

  • 直接在shell中执行uname -m 得到的就是电脑CPU的版本号
  • 获取 HOSTARCH(CPU架构) HOSTOS(主机系统)

静默编译(50~54)

  • 编译时哦make -s ,-s会作为MAKEFLAGS传给Makefile,因此XECHO变量=echo,即输出空信息

单独输出文件夹编译(78~93)

  1. make O=输出目录
  2. export BUILD_DIR=输出目录,然后make
  3. 若以上两者都指定了,O=输出目录具有更高的优先级

确定OBJTREE、SRCTREE、TOPDIR

  • OBJTREE: 存放编译出.o文件目录的根目录,在默认编译下,OBJTREE等于当前目录
  • SRCTREE: 源码目录,源代码的根目录,当前目录
  • TOPDIR: 源码目录

定义MKCONFIG变量(101)

  • 其值为源码根目录下mkconfig脚本文件,是uboot配置阶段配置脚本

include $(obj)include.config.mk(133)

  • include/config.mk不是源码自带的,是配置过程(make x210_sd_config)生成的
    其内容:
    1
    2
    3
    4
    5
    ARCH = arm
    CPU = s5pc11x
    BOARD = x210
    VENDOR = samsung
    SOC = s5pc110

调用MKCONFIG脚本传参(2589)

1
2
3
x210_sd_config : unconfig #依赖为unconfig
@$(MKCONFIG) $(@:_config=) arm s5pc11xx 210 samsung s5pc110 #传入参数有6个,$(@:_config=)变为x210_sd
@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk #创建config.mk文件并添加内容
  • 上面代码中的依赖 unconfig其定义在(473) 实现重复配置无报错
1
2
3
4
5
unconfig:
@rm -f $(obj)include/config.h $(obj)include/config.mk \
$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \
$(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep \
$(obj)board/$(VENDOR)/$(BOARD)/config.mk

ARCH CROSS_COMPILE

  • ARCH(133) 定义当前编译的目标CPU的架构
  • CROSS_COMPILE(136~180) 是定义交叉编译工具链的前缀(因为不同芯片所支持的工具链前缀都不一样,而后缀是一样的,这样定义增强程序可移植性)
  • 可以在编译时用make CROSS_COMPILE=xxx来实现编译传参覆盖Makefile里面的设置

include $(TOPDIR)/config.mk(185)

  • 运行其他配置,即进入config.mk文件
要是觉得不错,就鼓励一下吧!