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 编译流程
编译过程会联系配置文件中相关配置进行编译。
编译流程图
详细过程流程
执行 make V=1 ( V=1 表示打印出编译的详细debug)
1、u-boot由**u-boot-init
、u-boot-main
**两部分链接而成(不含DTS):
- $(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
arch/arm/Makefile文件中
:
2、由 u-boot 生成 u-boot-nodtb.bin
通过 cmd_objcopy_uboot 将 u-boot 制作成二进制文件 u-boot-nodtb.bin
3、生成 u-boot.bin
根据是否存在设备树文件 u-boot-nodtb.bin or u-boot-dtb.bin 生成u-boot.bin 一般配置文件config中会指定设备树文件 DEVICE_TREE = “ ”
4、制作生成 u-boot.imx
u-boot.imx 添加了一个大小为1K的头,主要首部保存了ddr的配置信息,用于告诉BOOT ROM找到uboot的位置和函数,要运行在什么模式,DRAM的配置数据等
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里去的时候可能读到的位置不一致,则会进行重定位。
启动流程2
CPU会先运行BootROM,再初始化DDR,再把u-boo拷贝到DDR里去 , 运行u-boot ,把u-boo拷贝到DDR里去的时候可能读到的位置不一致,则会进行重定位,一般修改程序里的地址
下节会通过源码对u-boot启动流程进行详细的分析
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 351134995@qq.com