u-boot配置及编译流程


u-boot 配置流程

顶层Makefile会包含2个配置文件include/config/auto.conf、include/autoconf.mk。

u-boot中有非常多的配置文件:(都是配置过程中生成的,源码中不存在)

1、.config:来自单板的默认配置、Kconfig;

2、include/config/auto.conf:来自.config,去掉了很多注释;

3、u-boot.cfg:它的内容跟头文件类似,来自:

(1) .config

(2) 头文件include/common.h,又包含了”#include <config.h>”;

4、include/autoconf.mk:来自u-boot.cfg,但是移除include/config/auto.conf的内容以免重复。

u-Boot配置过程

u-boot 编译流程

编译过程会联系配置文件中相关配置进行编译。

编译流程图

u-Boot编译过程

详细过程流程

执行 make V=1 ( V=1 表示打印出编译的详细debug)

执行 make V=1

1、u-boot由**u-boot-initu-boot-main**两部分链接而成(不含DTS):

u-boot-init和u-boot-main

  • $(u-boot-init):arch/arm/cpu/armv7/start.o
  • $(u-boot-main):后面一大串 ../built-in.o 如lib/built-in.o , fs/built-in.o
  • $(u-boot-keep-syms-lto):空,不包含任何内容
  • u-boot.lds 是用于生成链接脚本的

顶层Makefile

image-20250122005534539

image-20250122005433362

arch/arm/Makefile文件中

image-20250122010139179

2、由 u-boot 生成 u-boot-nodtb.bin

通过 cmd_objcopy_uboot 将 u-boot 制作成二进制文件 u-boot-nodtb.bin

u-boot-nodtb.bin

3、生成 u-boot.bin

根据是否存在设备树文件 u-boot-nodtb.bin or u-boot-dtb.bin 生成u-boot.bin 一般配置文件config中会指定设备树文件 DEVICE_TREE = “ ”

生成 u-boot.bin

4、制作生成 u-boot.imx

u-boot.imx 添加了一个大小为1K的头,主要首部保存了ddr的配置信息,用于告诉BOOT ROM找到uboot的位置和函数,要运行在什么模式,DRAM的配置数据等

制作生成 u-boot.imx

u-boot启动流程简要分析

BootROM、SPL、u-boot等概念,重定位等概念

XIP的概念

soc芯片上CPU能直接读取存储器指令并返回。即就地执行称为XIP

一上电,CPU必定从XIP设备得到第一条指令

号称支持Nand启动、支持SD卡启动、支持USB启动、支持URAT启动的芯片,里面必定有BootROM

BootROM作用

BootROM:硬件初始化、把程序从非XIP设备复制进RAM,从RAM里执行

如何支持多种启动方式(SD卡,EMMMC,USB,UART启动)
方法1:芯片有boot pin , 决定使用哪个外设。bootrom根据引脚决定读取哪个设备的程序 (通常国外芯片)
方法2:芯片有boot pin,决定多种外设的尝试顺序(通常国内芯片)

完整的u-boot复制进内存

BootROM被用来启动用户程序,用户程序可能有几百KB、几MB,但是片内的RAM只有几KB:

方法1:

​ BootROM从启动设备读取用户程序的前几KB到SRAM,运行它;

​ 这前几KB的代码负责:初始化DDR、把完整的程序从启动设备复制到DDR、并跳到DDR运行

方法2:

​ BootROM从启动设备读取SPL到SRAM,运行它;

​ SPL负责:初始化DDR、把用户程序从启动设备复制到DDR、并跳到DDR运行

重定位的2中方法

相对寻址,绝对寻址

启动流程1

CPU通过BootROM把SPL读进SRAM片内内存,SPL会初始化DDR,再把u-boot读到DDR里去 , 运行u-boot ,再把u-boot读到DDR里去的时候可能读到的位置不一致,则会进行重定位。

启动流程1

启动流程2

CPU会先运行BootROM,再初始化DDR,再把u-boo拷贝到DDR里去 , 运行u-boot ,把u-boo拷贝到DDR里去的时候可能读到的位置不一致,则会进行重定位,一般修改程序里的地址

启动流程2

下节会通过源码对u-boot启动流程进行详细的分析


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 351134995@qq.com

×

喜欢就点赞,疼爱就打赏