写在前头
*.版权声明:本篇文章为原创,可随意转载,转载请注明出处,谢谢!另我创建一个QQ群82642304,欢迎加入!
*.目的:整理一下RIotBoard开发板的启动流程,对自己的所学做一个整理总结,本系列Uboot代码基于2009.08版。
*.备注:整个系列只是对我所学进行总结,记录我认为是关键的点,另我能力有限,难免出现疏漏错误,如果读者有发现请多指正,以免我误导他人!
i.MX6 Solo从上电到Uboot
板子上电之后,先执行的是片内ROM的一段启动代码,具体可见imx6solo数据手册中< Chapter 8: System Boot >。启动代码根据寄存器配置及/或外部管脚的配置,决定进入下载模式或者从某处(Flash、emmc、SD卡等存储设备)启动Uboot。
如果是从emmc启动Uboot,根据数据手册所描述的,首先启动代码会将emmc前4K的数据拷贝到内部RAM,这些数据里面包含了Program image数据.
Program image是飞思卡尔定义的一个镜像数据结构,包括镜像向量表IVT,Boot Data,设备配置数据DCD和用户代码数据等信息,详见数据手册<8.6 Programe image>.
另:加载数据长度大小和IVT的偏移量根据启动设备类型的不同而不同,详见下表:
至于IVT为何要有一个偏移量,个人认为是空开位置用于存放MBR,目前RIotBoard是没有用到.IVT主要包含(详见< 8.6.1.1: Image Vector Table Structure >):
名称 | 含义 |
---|---|
header | IVT头部,标识IVT和IVT长度 |
entry | 第一条指令的入口地址,即Uboot的入口 | </