uboot顶层 Makefile,就是 uboot源码工程的根目录下的 Makefile文件。
本文继续对 uboot顶层 Makefile的前期准备工作进行介绍。续上一篇文章内容的学习,如下:
uboot顶层Makefile前期所做工作说明一_凌肖战的博客-CSDN博客
本文主要了解 uboot顶层 Makefile的前提部分内容,包括如下:
代码检查,模块编译,获取主机架构与系统,设置目标架构、交叉编译器与配置文件。
件。“make C=2” 用于检查所有的源码文件,顶层 Makefile 中的代码如下:
176 ifeq ("$(origin C)", "command line")
177 KBUILD_CHECKSRC = $(C)
178 endif
179 ifndef KBUILD_CHECKSRC
180 KBUILD_CHECKSRC = 0
181 endif
186 ifdef SUBDIRS
187 KBUILD_EXTMOD ?= $(SUBDIRS)
188 endif
189
190 ifeq ("$(origin M)", "command line")
191 KBUILD_EXTMOD := $(M)
192 endif
193
194 # If building an external module we do not care about the all: rule
195 # but instead _all depend on modules
196 PHONY += all
197 ifeq ($(KBUILD_EXTMOD),)
198 _all: all
199 else
200 _all: modules
201 endif
202
203 ifeq ($(KBUILD_SRC),)
204 # building in the source tree
205 srctree := .
206 else
207 ifeq ($(KBUILD_SRC)/,$(dir $(CURDIR)))
208 # building in a subdirectory of the source tree
209 srctree := ..
210 else
211 srctree := $(KBUILD_SRC)
212 endif
213 endif
214 objtree := .
215 src := $(srctree)
216 obj := $(objtree)
217
218 VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
219
220 export srctree objtree VPATH
第 186 行 判 断 是 否 定 义 了 SUBDIRS , 如 果 定 义 了 SUBDIRS , 变 量
227 HOSTARCH := $(shell uname -m | \
228 sed -e s/i.86/x86/ \
229 -e s/sun4u/sparc64/ \
230 -e s/arm.*/arm/ \
231 -e s/sa110/arm/ \
232 -e s/ppc64/powerpc/ \
233 -e s/ppc/powerpc/ \
234 -e s/macppc/powerpc/\
235 -e s/sh.*/sh/)
236
237 HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
238 sed -e 's/\(cygwin\).*/cygwin/')
239
240 export HOSTARCH HOSTOS
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux$ uname -m
x86_64
可以看出当前电脑主机架构为 “x86_64” ,“|”表示管道,意思是将 左边的输出作为右边的入,
sed -e 是替换命令,“sed -e s/i.86/x86/”表示将管道输入的字符串 中的 “ i.86” 替换为 “x86” ,其他的“sed -e s”命令同理。对于我的电脑而言,HOSTARCH=x86_64。
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux$ uname -s
Linux
可以看出此时的主机 OS 为“Linux”,使用管道将“Linux”作为后面“tr '[:upper:]' '[:lower:]'”的输入,“tr '[:upper:]' '[:lower:]'”表示将所有的大写字母替换为小写字母,因此得到 “linux”。
最后同样使用管道,将“linux”作为“sed -e 's/\(cygwin\).*/cygwin/'”的输入,用于将 cygwin.*替换为 cygwin。因此,HOSTOS=linux。
下一篇文章继续了解 uboot顶层 Makefile的前期内容。