《2.uboot和系统移植-第4部分-2.4.uboot配置和编译过程详解》
(朱老师物联网大讲堂笔记)
第一部分、章节目录
1.uboot主Makefile分析1
2.uboot主Makefile分析2
3.uboot主Makefile分析3
4.uboot主Makefile分析4
5.uboot主Makefile分析5
6.uboot主Makefile分析6
7.uboot配置过程详解1
8.uboot配置过程详解2
9.uboot的链接脚本
1.uboot主Makefile分析1
1.1、uboot version确定(Makefile的24-29行)
Makefile代码部分:
VERSION = 1
PATCHLEVEL = 30
SUBLEVEL = 4
EXTRAVERSION =
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
VERSION_FILE = $(obj)include/version_autogenerated.h
1、uboot的版本号分3个级别:
VERSION:主板本号
PATCHLEVEL:次版本号
SUBLEVEL:再次版本号
EXTRAVERSION:另外附加的版本信息
这4个用.分隔开共同构成了最终的版本号U_BOOT_VERSION ,这个变量记录了Makefile中配置的版本号。
2、include/version_autogenerated.h文件是编译过程中自动生成的一个文件,所以源目录中没有,但是编译过后的uboot中就有了。它里面的内容是一个宏定义,宏定义的值内容就是我们在Makefile中配置的uboot的版本号。
1.2、HOSTARCH和HOSTOS
Makefile代码部分:
HOSTARCH := $(shell uname -m | \
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/)
HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
sed -e 's/\(cygwin\).*/cygwin/')
注:sed的替换功能
test = abcdefgabc
Test1 = $(test) | sed -e s/abc/123/
Test2 = $(test) | sed -e s/abc/123/g
@echo $(Test1 )
@echo $(Test2 )
结果:
123defabc
123def123
abc被替换成了123,如果不加字母g,结果就变成了只有第一个abc被替换
1、HOSTARCH这个名字:HOST是主机,就是当前在做开发用的这台电脑就叫主机;ARCH是architecture(架构)的缩写,表示CPU的架构。所以HOSTARCH就表示主机的CPU的架构。
2、直接在shell中执行uname -m得到i686,得到的值其实你当前执行这个命令的电脑的CPU的版本号。
3、shell中的|叫做管道,管道的作用就是把管道前面一个运算式的输出作为后面一个的输入再去做处理,最终的输出才是我们整个式子的输出。
4、这两个环境变量是主机的操作系统和主机的CPU架构,得出后保存备用,后面自然会用到。
2.uboot主Makefile分析2
2.1、静默编译(50-54行)
Makefile代码部分: