uboot顶层Makefile前期所做工作说明三

一.  uboot顶层 Makefile文件

uboot顶层 Makefile,就是 uboot源码工程的根目录下的  Makefile文件。

本文继续对 uboot顶层 Makefile的前期准备工作进行介绍。续上一篇文章内容的学习,如下:

uboot顶层Makefile前期所做工作说明二_凌肖战的博客-CSDN博客

本文主要 了解 uboot顶层 Makefile前期所做的部分工作, 包括如下内容:

设置目标架构、交叉编译器和配置文件,调用 scripts/Kbuild.include,交叉编译工具变量设置。

二.     Makefile 前期所做的内容

8.  设置目标架构、交叉编译器和配置文件

编 译 uboot 的 时 候 需 要 设 置 目 标 板 架 构 和 交 叉 编 译 器 , make ARCH=arm
CROSS_COMPILE=arm-linux-gnueabihf- 就是用于设置 ARCH CROSS_COMPILE
顶层 Makefile 中代码如下:
 
244 # set default to nothing for native builds
245 ifeq ($(HOSTARCH),$(ARCH))
246 CROSS_COMPILE ?=
247 endif
248
249 KCONFIG_CONFIG ?= .config
250 export KCONFIG_CONFIG
245 行判断 HOSTARCH ARCH 这两个变量是否相等,主机架构 ( 变量 HOSTARCH)
x86_64 ,而我们编译的是 ARM 版本 uboot ,两个不相等。
249 行定义变量 KCONFIG_CONFIG uboot 是可以配置 的,这里设置配置文件为 .config
注意:.config 默认是没有的,需要使用命令“make xxx_defconfig” 对 uboot 进行配置,配

置完成以后就会在 uboot 根目录下生成.config。

默认情况下,.config xxx_defconfig 内容是一样的,因为.config 就是从 xxx_defconfig 复制过来的。如果后续自行调整 uboot 的一些配置参数,那么这些新的配置参数就添加到了.config 中,而不是 xxx_defconfig相当于 xxx_defconfig 只是一些初始配置,而 .config 的内容才是实时有效的配置。

可以看出,每次编译 uboot 的时候都要在 make 命令后面设置ARCH CROSS_COMPILE,使用起来很麻烦,可以直接修改顶层 Makefile,所以,可以在这里加入配置目标架构 ARCH 和 交叉编译器CROSS_COMPILE的值。

上面 代码加入ARCH与CROSS_COMPILE的配置后,如下所示:
245 ifeq ($(HOSTARCH),$(ARCH))
246 CROSS_COMPILE ?=
247 endif

249 ARCH = arm
250 CROSS_COMPILE = arm-linux-gnueabihf-

252 KCONFIG_CONFIG	?= .config
253 export KCONFIG_CONFIG

9.  调用 scripts/Kbuild.include

Makefile 会调用文件 scripts/Kbuild.include 这个文件,顶层 Makefile 中代码如下:

330 # We need some generic definitions (do not try to remake the file).
331 scripts/Kbuild.include: ;
332 include scripts/Kbuild.include
上面的 Makefile 中使用“ include ”包含了文件 scripts/Kbuild.include,而 Kbuild.include 文件里面定义了很多变量。
uboot 的编译过程中会用到 scripts/Kbuild.include 中的这些变量,后面用到的时候再分析。

10.  交叉编译工具变量设置

上面我们只是设置了 CROSS_COMPILE 的名字,但是交叉编译器其他的工具还没有设置,
顶层 Makefile 中相关代码如下:
336 AS		= $(CROSS_COMPILE)as
337 # Always use GNU ld
338 ifneq ($(shell $(CROSS_COMPILE)ld.bfd -v 2> /dev/null),)
339 LD		= $(CROSS_COMPILE)ld.bfd
340 else
341 LD		= $(CROSS_COMPILE)ld
342 endif
343 CC		= $(CROSS_COMPILE)gcc
344 CPP		= $(CC) -E
345 AR		= $(CROSS_COMPILE)ar
346 NM		= $(CROSS_COMPILE)nm
347 LDR		= $(CROSS_COMPILE)ldr
348 STRIP		= $(CROSS_COMPILE)strip
349 OBJCOPY		= $(CROSS_COMPILE)objcopy
350 OBJDUMP		= $(CROSS_COMPILE)objdump

之前设置了交叉编译器的名字前缀,基于前缀设置后,这里设置了交叉编译工具。

下一篇继续了解 uboot 顶层 Makefile 的前期准备内容。

你可能感兴趣的:(嵌入式C开发,linux,arm开发)