天天看点

X210(三星S5PV210)开发板启动过程小结

    最近在学习朱有鹏老师的linux嵌入式核心课程中的第一部分《ARM裸机部分》,学到了S5PV210的启动过程,在这里做个小结以加深理解。我使用的开发板是深圳九鼎创展的X210V3S版本的开发板。

1. CPU上电后先从内部ROM(三星文档中称作iROM)读取预先烧录好的代码BL0(BootLoader 0)执行。这个内部ROM是一块NorFlash,所以不需要初始化工作,可以直接读取其中的程序。BL0这段代码做了一些基本的初始化工作:

1.1 关闭看门狗

1.2 初始化指令Cache

1.3 初始化栈和堆(为了能使用C语言,之前的代码都要用汇编写)

1.4 初始化块设备的复制函数(后面读取外部寄存器需要用到)

1.5 初始化PLL和设置系统时钟

1.6 复制BL1(BootLoader 1)程序到内部SRAM存储器

1.7 检查校验和,若校验和错误,尝试第二启动方案

1.8 查看是否安全启动模式并做相应的检查(我暂时不知道啥是安全模式,不影响后面的学习)

1.9 跳转到BL1程序去执行

注意:由于S5PV210这颗CPU支持休眠模式,事实上在执行步骤1.3之前会判断当前是否是从休眠模式中唤醒的,如果是从休眠模式唤醒的话就直接跳到步骤1.9去执行BL1程序了;不是休眠模式唤醒的话才按顺序执行上面的步骤。为了简化学习过程,我们假定CPU是从上电开始复位的。

在执行步骤1.6的时候,会根据OM引脚来判断当前从哪个外设去读取BL1程序。按照三星给出的官方文档,支持的外设有SSD/NAND/ONENAND/NORFLASH/SD/USB。我手上这块开发板只支持两种方式,SD启动或者USB启动。把拨码开关拨到SD卡这边就会从SD卡读取BL1程序,拨到USB这边就会从USB去下载BL1程序。

2. 跳转到BL1之后就由BL1说了算了,我们来看下BL1程序都干了哪些活:

2.1 下载BL2(BootLoader 2)程序到SRAM存储器

2.2 查看是否安全启动模式并做相应的检查(继续忽略它)

2.3 跳转到BL2程序去执行

BL1干的活还是蛮简单的,就是下载并执行BL2的程序。

3. 跳转到BL2以后执行的任务就是两个:

3.1 初始化DRAM控制器,为加载OS(操作系统)做准备

3.2 加载OS镜像到DRAM,并跳转到DRAM去执行OS

操作系统开始运行之后,启动过程就顺利结束了。

继续阅读