关闭

uboot - 主Makefile分析【3】

标签: u-bootMakefile
313人阅读 评论(0) 收藏 举报
分类:

一、首先分析三个在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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:33921次
    • 积分:873
    • 等级:
    • 排名:千里之外
    • 原创:51篇
    • 转载:10篇
    • 译文:0篇
    • 评论:25条
    文章分类
    最新评论