----2020-6参考了一些笔记,用于对学习的记录,方便以后用到查看
目录
2.4.1.uboot主Makefile分析1
2.4.2.uboot主Makefile分析2
2.4.3.uboot主Makefile分析3
2.4.4.uboot主Makefile分析4
2.4.5.uboot主Makefile分析5
2.4.6.uboot主Makefile分析6
2.4.7.uboot配置过程详解1
2.4.8.uboot配置过程详解2
2.4.9.uboot的链接脚本
2.4.1.uboot主Makefile分析1
1.uboot version确定(Makefile的24-29行)
(1)uboot的版本号分3个级别:
VERSION:主板本号
PATCHLEVEL:次版本号
SUBLEVEL:再次版本号
EXTRAVERSION:另外附加的版本信息
这4个用.分隔开共同构成了最终的版本号。
(2)Makefile中版本号最终生成了一个变量U_BOOT_VERSION,这个变量记录了Makefile中配置的版本号。
(3)include/version_autogenerated.h文件是编译过程中自动生成的一个文件,所以源目录中没有,但是编译过后的uboot中就有了。它里面的内容是一个宏定义,宏定义的值内容就是我们在Makefile中配置的uboot的版本号。
Makefile下单独执行$(obj)为空,这里是 = $(obj) ,所以后面应该会有对变量obj的定义
CURDIR 其实是make 的内嵌变量,自动设置位当前目录。一般obj = $ (CURDIR), 所以一般$(obj)代表当前目录
- HOSTARCH和HOSTOS
(1)直接在shell中执行uname -m得到i686,得到的值其实你当前执行这个命令的电脑的CPU的硬件版本号。
(2)shell中的|叫做管道,管道的作用就是把管道前面一个运算式的输出作为后面一个的输入再去做处理,最终的输出才是我们整个式子的输出。
(3)HOSTARCH这个名字:ubuntu主机架构。所以HOSTARCH就表示主机的CPU的架构。
#uname -m 查看主机类型:i686 32位的ubuntu 。 统一把i686的Ubuntu修改为i386
#HOSTOS:uname -s 查看主机操作系统,tr '[:upper:]' '[:lower:]'将所有大写变小写,然后假如有cygwin.*,替换成cygwin,并将结果放入变量HOSTOS
Cygwin是以前win下的unix开发环境,之前没有ubuntu。 这个一般也不用了。
(4)这两个环境变量是主机的操作系统和主机的CPU架构,得出后保存备用,后面自然会用到。
export导出变量HOSTARCH HOSTOS ,export这个一般是用来提供该目录下子目录makefile(sub make)中访问的,同一级的另外一个makefile中,是无法访问/得到的。(可以通过makefile中内置变量MAKELEVEL查看得知当前makefile的levlel)
Sed:
-e : 可以在同一行里执行多条命令
不加 -e 只有 's/11/00/g' 进行了操作
sed是用来处理文本的 s/正则表达式/替换字符串/ :表示将正则表达式的内容替换为后面的字符串 -e :多点编辑(这个没懂)
tr: translate的简写,即翻译的意思。主要用来从标准输入中通过替换或删除操作进行字符转换。只接受标准输入,不接受文件参数。
命令语法:
tr [–c/d/s/t] [SET1] [SET2]
SET1/SET2: 字符集
-t: truncate-set1,将SET1用SET2替换,一般缺省为-t
2.4.2.uboot主Makefile分析2
1、静默编译(50-54行)
(1)平时默认编译时命令行会打印出来很多编译信息。但是有时候我们不希望看到这些编译信息,就后台编译即可。这就叫静默编译。
(2)使用方法就是编译时make -s,-s会作为MAKEFLAGS传给Makefile,在50-54行这段代码作用下XECHO变量就会被变成空(默认等于echo),于是实现了静默编译。
#如果MAKEFLAGS中包含s,则静默编译
$(findstring FIND,IN)