[uboot] (第四章)uboot流程——uboot编译流程

本文详细介绍了U-Boot的编译流程,包括编译方法、生成文件、整体流程和具体步骤。从uboot-nodtb.bin的生成到dtb文件的制作,再到u-boot-dtb.bin和u-boot.bin的最终形成。文中还探讨了连接脚本u-boot.lds的作用,以及编译过程中涉及的关键定义和符号表中的重要符号。
摘要由CSDN通过智能技术生成

以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为例

[uboot] uboot流程系列
[project X] tiny210(s5pv210)上电启动流程(BL0-BL2)
[project X] tiny210(s5pv210)从存储设备加载代码到DDR
[uboot] (第一章)uboot流程——概述
[uboot] (第二章)uboot流程——uboot-spl编译流程
[uboot] (第三章)uboot流程——uboot-spl代码流程
[uboot] (第四章)uboot流程——uboot编译流程
[uboot] (番外篇)global_data介绍
[uboot] (番外篇)uboot relocation介绍

建议先看《[project X] tiny210(s5pv210)上电启动流程(BL0-BL2)》,根据例子了解一下上电之后的BL0\BL1\BL2阶段,以及各个阶段的运行位置,功能。
建议先看《[uboot] (第二章)uboot流程——uboot-spl编译流程》,其编译流程基本上是类似的。最大区别在于dtb的编译。

=================================================================================

一、uboot编译和生成文件

0、说明

现在的uboot已经做得和kernel很像,最主要的一点是,uboot也使用了dtb的方法,将设备树和代码分离开来(当然可以通过宏来控制)。
project-x/u-boot/configs/tiny210_defconfig

CONFIG_OF_CONTROL=y
// 用于表示是否使用了dtb的方式

CONFIG_OF_SEPARATE=y
// 是否将dtb和uboot分离表一

所以在uboot的编译中,和spl的最大区别是还要编译dtb。 (前面我们将的spl是没有使用dtb的,当然好像也可以使用dtb,只是我没有试过)。

1、编译方法

在project X项目中,所有镜像,包括uboot、kernel、rootfs都是放在build目录下进行编译的。具体去参考该项目build的Makefile的实现。
假设config已经配置完成,在build编译命令如下:

make uboot

Makefile中对应的命令如下:
project-x/build/Makefile

BUILD_DIR=$(shell pwd)
OUT_DIR=$(BUILD_DIR)/out
UBOOT_OUT_DIR=$(OUT_DIR)/u-boot
UBOOT_DIR=$(BUILD_DIR)/../u-boot
uboot:
        mkdir -p $(UBOOT_OUT_DIR)
        make -C $(UBOOT_DIR) CROSS_COMPILE=$(CROSS_COMPILE) KBUILD_OUTPUT=$(UBOOT_OUT_DIR) $(BOARD_NAME)_defconfig
        make -C $(UBOOT_DIR) CROSS_COMPILE=$(CROSS_COMPILE) KBUILD_OUTPUT=$(UBOOT_OUT_DIR)
## -C $(UBOOT_DIR) 指定了要在../uboot,也就是uboot的代码根目录下执行make
## CROSS_COMPILE=$(CROSS_COMPILE) 指定了交叉编译器
## KBUILD_OUTPUT=$(UBOOT_OUT_DIR) 指定了最终编译的输出目录是build/out/u-boot.

最终,相当于进入了uboot目录执行了make动作。

2、生成文件

最终编译完成之后,会在project-x/build/out/u-boot下生成如下文件:

arch   common   dts       include   net         tools       u-boot.cfg      u-boot.lds        u-boot.srec
board  disk     examples  lib       scripts  System.map  u-boot      u-boot.dtb      u-boot.map        u-boot.sym
cmd    drivers  fs        Makefile  source   test        u-boot.bin  u-boot-dtb.bin  u-boot-nodtb.bin

其中,arch、common、dts、include、board、drivers、fs等等目录是对应代码的编译目录,各个目录下都会生成相应的built.o,是由同目录下的目标文件连接而成。
重点说一下以下几个文件:

文件 说明
u-boot 初步链接后得到的uboot文件
u-boot-nodtb.bin 在u-boot的基础上,经过objcopy去除符号表信息之后的可执行程序
u-boot.dtb dtb文件
u-boot-dtb.bin 将u-boot-nodtb.bin和u-boot.dtb打包在一起的文件
u-boot.bin 在需要dtb的情况下,直接由u-boot-dtb.bin复制而来,也就是编译u-boot的最终目标
u-boot.lds uboot的连接脚本
System.map 连接之后的符号表文件
u-boot.cfg 由uboot配置生成的文件

二、uboot编译流程

1、编译整体流程

根据一、2生成的文件说明可知简单流程如下:
(1)各目录下built-in.o的生成

Created with Raphaël 2.1.0 源文件、代码文件 编译、汇编 目标文件 同目录目标文件连接 built-in目标文件

(2)由所有built-in.o以u-boot.lds为连接脚本通过连接来生成u-boot

Created with Raphaël 2.1.0
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值