U-Boot源码分析之Makefile

    之前用过两个版本u-boot,分析过它的Start.S文件(PowerPC、ARM)源代码,也移植过内部的各部分硬件驱动及组件(串口、I2C、SPI、Flash文件系统、USB、DMA等)源码,自我感觉比较熟悉了。但最近逛CSDN论坛发现有不少人在问U-Boot中的Makefile的一些参数含义及配置方法,这才觉得忽视了U-Boot源码中最重要的组织者。正好,又在ChinaUnix上看见了一篇 http://blog.chinaunix.net/u3/90973/showart_1815948.html ,解析的是1.1.6版本,2410平台的Makefile。参考了一下,这里分析2011.6版,FreeScale的mpc83xx系列处理器平台。

    u-boot的源代码包含了对几十种处理器、数百种开发板的支持,可是对于特定的开发板,配置编译过程只需要其中部分程序。这里就需要用到Makefile了。
编译
    以mpc8313erdb板为例,编译的过程分两部:
# make mpc8313erdb_config
# make
顶层Makefile分析
    要了解一个LINUX工程的结构必须看懂Makefile,尤其是顶层的,没办法,UNIX世界就是这么无奈,什么东西都用文档去管理、配置。还是以mpc8313为例,顺序分析Makefile大致的流程及结构如下:
    1) Makefile中定义了源码及生成的目标文件存放的目录,目标文件存放目录BUILD_DIR可以通过make O=dir或者export BUILD_DIR=dir两种方式指定。如果没有指定,则设定为源码的根目录,一般编译的时候都建议指定输出目录,这样可以不影响其他的源码结构,便于管理,至于它的控制流程,每一步指令都有详细注释,感兴趣的可以看一下,再看下其它目录变量的定义:

OBJTREE和LNDIR为存放生成文件的目录,TOPDIR与SRCTREE为源码所在目录
OBJTREE  := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
SRCTREE  := $(CURDIR)
TOPDIR  := $(SRCTREE)
LNDIR  := $(OBJTREE)
export TOPDIR SRCTREE OBJTREE
    2)定义变量MKCONFIG:这个变量指向一个脚本,即顶层目录的mkconfig。
MKCONFIG := $(SRCTREE)/mkconfig
export MKCONFIG
    在编译U-BOOT之前,先要执行
#make mpc8313erdb_33_config(u-boot中有两种主频的8313处理器,所以也要添加配置)
mpc8313erdb_33_config是Makefile的一个目标,定义如下:
mpc8313erdb_33_config : unconfig
@$(MKCONFIG) -a MPC8313ERDB ppc mpc8313 mpc8313erdb freescale
unconfig::
@mkdir -p $(obj)include

    @if [ "$(findstring _33_,$@)" ] ; then \

        $(XECHO) -n "...33M ..." ; \

        echo "#define CFG_33MHZ" >>$(obj)include/config.h ; \

    fi ; \

    if [ "$(findstring _66_,$@)" ] ; then \

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值