从零开始的uboot的系统移植3
接上节的uboot的系统移植的2开始说明:
根据朱友鹏uboot移植视频:
继续makefile的分析
1、如何移植uboot,就是懂他的规则和含义就可以了,环境变量也要弄懂;
ARCH 和 CROSS_COMPILE环境变量:
1.1、接下来导出了两个很重要的环境变量
一个是ARCH:上面导出的,植来自于我们的配置过程,他的植会影响后面CROSS_COMPILE环境变量
ARCH: 定义我们当前编译的目标CPU的架构:
arm 这里主要用arm的架构
CROSS_COMPILE是被arch所确定的,那么我们只能在arm的分支去设置CROSS_COMPILE值
不一定非得全部路径,相对路径也是可以的。
如果已经将工具链导出到环境变量,并且已经设置了符号链接,这样他就可以直接用
arm-linux- 就可以直接找到。
是我们定义交叉工具链的前缀:
就是方便我们移植时,不用把所有的都修改:
用前缀加上我们的后缀,来定义编译过程中用到的各种交叉工具链。
PS: 我们把前缀和后缀分开还有一个原因:在不同的CPU架构上的交叉编译工具链,
只是前缀不一样,后缀都是一样的。(136-182行makefile来确定)(确定的方法就是根据条件编译)
我们实际执行时:我们可以在makefile中更改设置CROSS_COMPILE的植,也可以在编译
时用 make CROSS_COMPILE=xxxx 来覆盖传参的植。
2、#include $(TOPTREE)/config.mk
在这里添加一个makefile主makefile185行
这个文件主要是定义了编译工具的使用,
我们已经定义了前缀,后缀就像上图所示的直接加上前缀的结尾写上。
我们还有配置生成的autoconfig.mk,里面全部都是CONFIG_XXX = y
这里面就包含了开发板的配置项目。
autoconfig.mk不是源码提供的,是配置过程自动生成的,(后面的.h所生成)
这个文件的作用就是用来指导整个uboot的编译过程(跟内核的编译有一点像)这个文件的内容
其实就是很多CONFIG_XXX开头的宏定义。其实就是配置过程中的变量。这些宏或者说变量
会影响uboot的编译过程的走向,原理就是条件编译;Y就是编译,N就是不编译,M就是模块编译
同一个代码包含了各种不同开发板的适用代码,用条件编译进行区别。
配置过程也是需要原材料产生的,include/configs/xxx.h头文件。在X210位include/configs/x210_sd.h
这个头文件里面全部都是宏定义,就是我们对自己开发板的移植过程。每一个开发板都对应
每一个.h文件,可能有一些是自己原厂生产的,就需要拿大众的进行修改,这个头文件里面
每一个宏定义都十分重要。这些配置的宏定义就是这里的头文件。