uboot - 主Makefile分析【3】

一、首先分析三个在Makefile中定义的变量:


(1)OBJTREE:就是编译输出.o文件的根目录,在默认编译下就是当前的目录,就是主makefile存在的目录
 如果是用O=xxx编译的 那么OBJTREE就是指定的输出目录xxx

(2)SRCTREE:源码目录,就是源代码的根目录,也就是当前目录。在默认情况下OBJTREE = SRCTREE,

在O=xxx指定输出目录的编译下就是各自为各自Makefile中定义这两个变量,其实就是为了记录编译后的.o文件往哪里放,

就是为了实现O=xxx的这种编译方式的。

3)MKCONFIG:Makefile中定义的一个变量(在这里定义,在后面使用),它的值就是我们源码根目录下面的mkconfig。(如图)
这个mkconfig是一个脚本,这个脚本就是uboot配置阶段的配置脚本。


二、接下来我们来看Makefile导出的5个环境变量:ARCH,CPU,BOARD,VENDOR,SOC.的作用及config.mk

(1)先说说config.mk怎么来的?在哪里?

config.mk早uboot的源码是没有的是在执行make NAME_config或者make O=xxx NAME_config的时候产生的,执行完

make NAME_config或者make O=xxx NAME_config会在对应的目录下的include目录下生成。比如我使用的是默认的编译则会

在makefile根目录下include目录下产生,如图:


2)我们说说ARCH,CPU,BOARD,VENDOR,SOC是怎么被定义赋值的?为什么不在makefile中直接赋值定义。


之所以不直接给出这5个环境变量的值,是因为我们希望这5个值是可以被人很容易的、集中的配置的。怎么被定义的呢:

你在命令行执行make NAME_config或者make O=xxx NAME_config的时候,makefile会索引到目标NAME_config上进行

对ARCH,CPU,BOARD,VENDOR,SOC赋值,并写入include/config.mk下,如图,makefile下的目标为:


所以输入 命令行下make x210_sd_config会在include/下生成config.mk文件,文件内容如下:


如果我们要更改这里的某个配置值要到目标NAME_config那里调用MKCONFIG脚本传参时的参数。


三、我们说说ARCH CROSS_COMPILE变量(使用哪种编译链来编译)

makefile里面支持很多类型的架构的交叉编译 ARM PPC MIPS NIOS等我们在上面的config.mk很明显的看出ARCH = arm 

(1)CROSS_COMPILE是被ARCH所确定的,只要配置了ARCH=arm,那么我们就只能在ARM的那个分支去设置CROSS_COMPILE的值。

这个设置值只要能保证找到那个交叉编译工具链即可,不一定非得是全路径的,相对路径也可以。(如果已经将工具链导出到环境变量,

并且设置了符号链接,这样CROSS_COMPILE = arm-linux-就可以)如图:


(2)实际运用时,我们可以在Makefile中去更改设置CROSS_COMPILE的值,也可以在编译时用make CROSS_COMPILE=xxxx来设置,

而且编译时传参的方法可以覆盖Makefile里面的设置。直接在命令行下输入make CROSS_COMPILE=xxxx来赋值。如图:







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值