S5PV210启动流程分析

来源:互联网 发布:杭州市行知小学地址 编辑:程序博客网 时间:2024/05/21 17:49
  1. S5PV210上电后首先从IROM处执行已经固化的启动代码BL0,IROM(0xD001_0000~0xD001_FFFF,64K空间);
  2. 在BL0初始化过程中对设备进行判断,并从启动设备拷贝BL1(最大16k)到IRAM地方,IRAM(0xD002_0000,0xd0003_7FFF),其中0xD0020000~0xD0020010这16字节为BL1的检验信息和尺寸,并对BL1进行校验,校验通过转入BL1进行执行,BL1继续初始化,并拷贝BL2(最大80个字节)到IRAM进行校验,校验通过后进入BL2。
  3. BL2完成比较复杂的初始化工作,包括DRAM的初始化,完成后将OS代码拷贝到DRAM里面,并跳转到OS中执行完成启动引导。

BL0完成的工作:

关闭看门狗,初始化icache,初始化堆栈,初始化设备拷贝功能,设置系统时钟,拷贝BL1到iRAM,检验BL1的校验和,失败选择安全启动模式,成功跳转到IRAM执行

IRAM前16个字节的内容是:

地址           内容
0xD002_0000  
    BL1 的大小
0xD002_0004
   必须写为 0
0xD002_0008
   CheckSum
0xD002_000C
    必须写为 0

检验方法如下:

for(count = 0;count < dataLength; count++){buffer = (*(volatile u8*))(uBLAddr + count);CheckSum = CheckSum + buffer;}
//count--循环索引变量
//dataLength BL1的大小以字节为单位
//buffer从BL1里读一个字节的数据
//BL1的校验和
生成BL1的方法:

在从启动设备(如:NAND FLASH / SD 卡)拷贝 BL1 的前 16K 数据到 IRAM时,这 16K 数据中的前 16byte 中保存了校验和的值以及 BL1 的大小,在拷贝过程中 CPU 会计算

出当前 bin 文件中含’1’的个数,然后与校验和进行比较,如果二者相等则继续运行程序,否则,不执行。很巧,两个16.


0 0
原创粉丝点击