本文参考文档:5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf
一、启动过程概述
先看一下文档里给出的 S5PV210 的启动框架:
1、硬件需求
- 基于 CortexA8 的 S5PV210 微处理器
- 64KB 的内部 ROM (iROM)
- 96KB 的内部 SRAM
- 通用 SDRAM 和对应的控制器
- 4/8Bit 的高速 SD/MMC 控制器 和对应的SD/MMC/eMMC
- 其它一些控制器(NandFlas、eSSD、UART/USB)
这么做的目的是平衡硬件的开销和速度。
2、启动过程解释
① iROM 做一些预初始化工作,包括系统时钟、特殊设备的控制器和启动介质的初始化;
② iROM 将启动介质(可以是MMC/Nand/eSSD/NOR等)中的 BL1 拷贝到 SRAM 上,安全模式下校验 BL1;
③ 执行 BL1:BL1 将 BL2 搬移到 SRAM,安全模式下校验 BL2;
④ 执行 BL2:BL2 负责初始化 DRAM 控制器并将 OS 从启动介质搬移到 SDRAM 中;
关于 BL1 和 BL2:BL1 + BL2 为 boot-loader,它们最初都存储在启动介质中,之后会被分别搬移到 SRAM 上执行(BL1由 iROM 负责搬移,BL2 由 BL1 搬移);它们的总大小为 96kb,通常情况下,BL1 占16k,BL2 占80k。 类似地,iROM 内的这段启动代码称为 BL0。
⑤ 最后,跳转到 OS 执行操作系统。
二、完整的启动过程
完整的启动流程图如下:
1、BL0 的具体工作
① 关看门狗;
② 初始化指令缓存;
③ 初始化栈;
④ 初始化堆;
⑤ 初始化块设备赋值函数( Block Device Copy Function);
⑥ 初始化 PLL 并设置系统时钟;
⑦ 将 BL1 从启动介质复制到内部的 SRAM 中(由 OM pin 决定启动介质);
⑧ 如果是安全模式,则校验 BL1,如果校验失败,iROM 将尝试第二种启动方式();
⑨ 跳转到 BL1。
2、OM pin
这是文档上给出的 OM pin 选择图:
假设我们需要从 SD 卡启动的话,OM[5-0] = {0,0,1,1,0,1};
而假设我们需要使用 USB 调试模式的话,OM[5-0] = {1,X,X,X,X,1}。
3、X210 的启动优先级(OM[5]=0 的情况下)
① 先 1st 启动,即通过 OM pin 选择启动介质;
② 在 2st 启动,固定从 SD2;
③ 从 UART 启动;
④ 从 USB 启动。