uboot顶层Makefile分析-make的过程分析二

一.  uboot的 make过程

本文来了解一下 uboot的 make 过程。继uboot配置命令执行之后,最终生成 uboot.bin 裸机程序的过程。

本文续上一篇文章的学习,地址如下:

uboot顶层Makefile分析-make的过程分析一_凌肖战的博客-CSDN博客

二.  uboot的 make过程:链接

这里了解一下,各子目录下的 built-in.o 是怎么生成的。
drivers/gpio/built-in.o 为例,在 drivers/gpio/目录下会有个名为 .built-in.o.cmd 的文件,此文件内容如下:
cmd_drivers/gpio/built-in.o := arm-linux-gnueabihf-ld.bfd -r -o 
drivers/gpio/built-in.o drivers/gpio/mxc_gpio.o
可以看出, drivers/gpio/built-in.o 这个文件是使用 ld 命令由文件 drivers/gpio/mxc_gpio.o 生成而来的, mxc_gpio.o mxc_gpio.c 编译生成的 .o 文件, 这个是 NXP I.MX 系列的 GPIO 驱动文件。
这里用到了 ld -r 参数,参数含义如下:-r –relocateable : 产生可重定向的输出:例如,产生一个输出文件它可再次作为 ld 的输 入,这经常被叫做“部分链接”,当我们需要将几个小的 .o 文件链接成为一个 .o 文件的时候,需 要使用此选项。
最终将各个子目录中的 built-in.o 文件链接在一起就形成了 u-boot ,使用如下命令编译 uboot
就可以看到链接的过程:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_
defconfig V=1
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- V=1

编译的时候,会输出编译连接信息,如下为一部分Log信息,下图剪头处,即为 uboot的链接地址:
uboot顶层Makefile分析-make的过程分析二_第1张图片

Log信息还有如下:
arm-linux-gnueabihf-ld.bfd -pie --gc-sections -Bstatic -Ttext 0x87800000 \
-o u-boot -T u-boot.lds \
arch/arm/cpu/armv7/start.o \
--start-group arch/arm/cpu/built-in.o \
arch/arm/cpu/armv7/built-in.o \
arch/arm/imx-common/built-in.o \
arch/arm/lib/built-in.o \
board/freescale/common/built-in.o \
.
.
.
test/dm/built-in.o \
--end-group arch/arm/lib/eabi_compat.o \
-L /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linuxgnueabihf/4.9.4 -lgcc -Map u-boot.map
可以看出最终是用 arm-linux-gnueabihf-ld.bfd 命令将 arch/arm/cpu/armv7/start.o 和其他众多
的 built_in.o 链接在一起,形成 u-boot。
目标 all 除了 u-boot.bin 以外还有其他的依赖,比如 u-boot.srec 、u-boot.sym 、System.map、
u-boot.cfg 和 binary_size_check 等等,这些依赖的生成方法和 u-boot.bin 很类似。

三.  总结 uboot的 make过程

这里总结一下uboot的 make 命令的流程。如下图所示:

uboot顶层Makefile分析-make的过程分析二_第2张图片

上图就是 ubootmake命令的执行流程,关于 uboot 的顶层 Makefile 就分析到这里。

点是“make xxx_defconfig”和“make”这两个命令的执行流程:

make xxx_defconfig 用于配置 uboot ,这个命令最主要的目的就是生成 .config 文件。
make :用于编译 uboot ,这个命令的主要工作就是生成二进制的 u-boot.bin 文件和其他的一
些与 uboot 有关的文件,比如 u-boot.imx 等等。

你可能感兴趣的:(系统移植篇,linux,arm开发)