S5PV210启动流程分析

2019-04-14 17:13发布

  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.