iMX6ULL启动流程
- 1. Boot ROM
- 2. IVT和DCD
- 3. 启动流程
- 4. 总结
我移植的板子是讯为的TERMINATOR_V1.1开发板,参考板为官方 i.MX6ULL EVK开发板。
- iMX6ULL uboot2021.04 linux5.15.32移植
- iMX6ULL启动流程
- iMX6ULL u-boot2021.04移植
- iMX6ULL linux5.15.32移植
- iMX6ULL buildroot-2022.02.5构建根文件系统
1. Boot ROM
我们知道ARM的启动地址是0地址,查看手册可知iMX6ULL的0地址是Boot ROM区域,Boot ROM区域的程序是上电运行的第一个程序即BL1。但是DDR的地址是在0x80000000处,我们的程序是存储在SD卡或EMMC等设备上,Boot ROM可根据我们的启动配置选择从不同的存储介质上加载并启动程序。
Boot ROM可以根据BOOT_MODE[1:0]两个选择启动模式,00生产的时候可能会用到,01串行下载模式调试uboot非常有用,10内部Boot模式可选择从不同的介质启动。
在internal boot模式下可以通过配置BOOT_CFG1[7:4]这四个值选择不同的介质启动,选择了不通的介质还需要配置其他的值配置不同的参数,这里不一一介绍下面以EMMC为例简要说明。
比如使用EMMC还有一些重要的参数需要选择,比如需要选择eSDHC1、eSDHC2那个接口,在我们的板子上这两个分别对应SD卡和EMMC。
到这里Boot ROM就可以根据配置去加载我们的uboot运行,Boot ROM把uboot加载到什么地址去运行,这是我们接下来要考虑的问题。
2. IVT和DCD
IVT全称镜像向量表(Image Vector Table),IVT包括程序镜像入口点、指向设备配置数据(DCD)的指针和ROM在引导过程中使用的其他指针。Boot ROM定位IVT在启动设备一个固定的地址,不同启动设备地址不同如下表。
IVT头的结构如下图,uboot在编译的时候会把IVT加在uboot的前面,这部分可以在uboot的tools目录下找到这个生成工具的源码。
DCD全称是设备配置数据(Device Configuration Data),Boot ROM可以根据这部分数据对设备做简单的配置,在uboot板级文件夹中的imximage.cfg
文件中可以进行配置。
3. 启动流程
通过上述的介绍我们知道了iMX6ULL的启动过程,首先是Boot ROM根据配置(一般是引脚配置)选择启动设备,根据IVT加载启动uboot,然后uboot引导启动linux kernel,最后linux启动挂载根文件系统。
- Boot ROM加载并启动uboot
- uboot引导并启动linux kernel
- 根文件系统启动
知道了启动的过程就清楚我们每个阶段的目的和要做什么,对我们之后的移植有帮助,便于分析问题。
4. 总结
简单了解imx6ull的启动过程,对后面的移植和分析问题有帮助。本文仅供学习参考,如有问题欢迎指正。