目录
2、uboot 主Makefile分析
VERSION=主版本号
PATCHLEVER= 次版本号
SUBLEVEL=再版本号
EXTRAVERSION = 自己定义的版本号
U_BOOT_VERSION =最终版本号 “1.3.4xyz”
VERSION_FILE = $(obj)include/version_autogenerated.h(编译自动生成的文件)里面就是生成了一个宏,记录了上面我们配置的版本号,如下:
验证:修改Makfile的版本信息,再编译下载到SD卡中启动中看uboot中的版本信息是否一致。
直接执行:在shell中可以在Makefile中使用:shell uname -m 或者uname -m
得到当前执行这个命令的电脑的CPU版本号
== “ | ” 就是管道,也就是前面运算式的结果就是后面运算式的输入==
HOSTARCH := $(shell uname -m | \ 如前面运算式输出是i686 后面运算被匹配/ i.86/i386 "."被替换为3,最终的i386,如果第一行没有匹配则往后匹配。
sed -e s/i.86/i386/ \
-e s/sun4u/sparc64/
-e s/arm.*/arm/
-e s/sa110/arm/
-e s/powerpc/ppc/
-e s/ppc64/ppc/
-e s/macppc/ppc/)
HOSTARCH名字:HOST就是主机,当前做开发的这台电脑。
ARCH:achitecture 架构,HOSTARCH就是主机架构
HOSTOS := $(shell uname -s | tr ‘[:upper:]’ ‘[:lower:]’ | \ (前面的结果转成小写) 如:Linux 转为linux->赋值HOSTOS
sed -e ‘s/(cygwin).*/cygwin/’)
HOSTOS 转为小写 linux
测试:
2.1、Makefile 分析2
不打印Makefile的调试信息,叫做静默编译 make -s 为静默编译
2、编译方法(原地编译和单独输出文件夹编译)
(1)编译复杂项目,Makefile提供了2种编译管理方法,默认情况下是当前文件夹中的.C文件,编译出来的.o文件会放在.c文件中,叫做原地编译。
(2)原地编译有一些坏处,一:污染了源文件目录,二是缺陷就是一套源代码只能按照一种配置和编译方法进行处理,无法同时维护2个或者2个以上的配置编译方式。
(3)为了解决以上的缺陷,uboot支持单独输出文件夹方式的编译(linux kernel也支持,uboot也是在kernel中学习的)思路是编译时另外指定一个输出目录,编译的所以.o文件或生产的其