第三章——Exynos 4412的启动过程分析

来源:互联网 发布:编程软件app 编辑:程序博客网 时间:2024/05/02 00:42

参考网上大牛的文章http://www.techbulo.com/1335.html


固化在芯片内部ROM上的代码iROM把启动设备上特定位置处的程序BL1读入片内存 (iRAM) ,并执行它。BL1 是三星公司提供的,无源码。

BL1又把启动设备上另一个特定位置处的程序BL2读入片内内存,并执行它。BL1是我们编写的源码。


(1) iROM :


由上图可以看出,首先关闭看门狗,关闭中断及MMU,关闭数据缓存,打开指令缓存,清除TLB,然后将其他核进入IDLE模式,只留CPU0,这里有了第一个跳转分支,IROM判断当前启动模式,是冷启动还是唤醒,如果是唤醒模式,那么就是直接跳转到BL1,在BL1里面我们会再次判断是否是唤醒模式,如果是就直接跳转到唤醒函数,一般都是linux内核的唤醒句柄。当然在裸机里都是冷启动的,休眠唤醒一般是不需要关注的,当然如果你的裸机程序需要支持休眠唤醒,就需要增加相应的代码了。

继续分析,设置IRQ及SVC模式的栈空间,这个时间,栈地址是其内部的一片IRAM,这小片RAM是IROM运行的外部随机存储器,没有这片小内存,IROM是无法运行的。接下了就是初始化IROM里面所使用的各种变量,初始化只读数据段,未初始化数据段清零,导出部分核心函数,这个函数可以在BL1中使用,获取当前复位的状态,设置系统时钟分频,获取OM管脚配置模式,这里可以从多种外设启动,具体启动模式如下表:



简单地说,iROM就是先设置程序运行环境 (比如关看门狗、关中断、关MMU 、设置栈 、设置栈 、启动 PLL 等 );然后根据OM引脚确定启动设备 (NAND Flash/SD 卡/其他 ),把 BL1 从里面读出存入iRAM;最后启动 BL1 。


(2) BL1 :下图是 BL1 的启动过程


简单地说,也是设置程序运行环境(初始化中断、设置栈等 );然后从启动设备上把 BL2读入iRAM;最后启动它。



BL1、BL2在SD卡上的存储位置




BL1、BL2在iRam中的存储位置


0 0