IMX6ULL system boot
1、芯片上电运行的第一段代码
on-chip boot ROM 的 boot ROM code
2、boot mode
boot ROM code通过寄存器BOOT_MODE[0:1]的值决定启动方式。
boot mode被寄存器BOOT_MODE[0:1]控制,寄存器BOOT_MODE[0:1]被引脚BOOT_MODE0和BOOT_MODE1控制。
Serial Downloader
on-chip boot ROM 放着芯片自带的 boot ROM code,boot ROM code可以通过 USB 或者 UART 接收简单的配置固件(a provisioning program)到 RAM,然后运行配置固件,配置固件可以通过 USB 或者 UART 接收镜像文件到 SD/MMC flash(boot devices)。
Internal Boot
boot ROM code初始化基本硬件后,从选中的boot device加载镜像文件,验证完镜像文件后运行镜像文件。
如果BT_FUSE_SEL等于1,启动参数由寄存器 eFUSEs 决定(产品用)
如果BT_FUSE_SEL等于0,启动参数 GPIOs 决定(开发测试用)
Boot From Fuses
如果BT_FUSE_SEL等于0,表示boot device还没下载镜像文件,会进入 Serial Downloader 模式。
如果BT_FUSE_SEL等于1,转到 Internal Boot
Boot From Fuses有一个优点:BT_FUSE_SEL出厂默认是0,通过 Serial Downloader 模式批量下载镜像文件到 boot device,并修改BT_FUSE_SEL为1,重启后直接从boot device启动,省去了修改BOOT_MODE0和BOOT_MODE1引脚电平改变boot mode模式。
3、Device Configration
启动参数
boot ROM code读取启动参数,来决定如何运行代码。
启动参数:
- 决定选择哪个boot device
- boot device的配置(比如 SD总线宽度、支持的速率)
DCD
DCD参数存放在镜像文件中
4、boot device
SD
SD卡的数据结构如下,uboot和其他数据(比如IVT、DCD)组成Program Image,从地址0x00000400开始存,其中IVT放最前面
由下表可知,IVT的起始地址是0x400,和上图对应上
IVT的格式如下,包括header、entry等
entry: Application(也就是uboot)在DDR的绝对地址
boot data start: IVT绝对地址-IVT offset,以SD举例则是将MBR包含在内
Boot Device Memory里的entry记录的是Application的目的地址,不需要指定Application在SD卡的源地址是因为由上图可知,Boot Device Memory的内容是原原本本搬进 Dest. Memory,Application在SD卡的存储地址等于entry-boot data start。
疑问:哪里写了Initial Load Regions是拷贝到OCRAM
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」