6200 sdboot 测试版分析(一)

分析boot启动代码时先分析存储空间分布(硬件工程师一般会提供),链接脚本Makefile文件, 务必注意由板级硬件设置的启动方式(例如:sd卡启动,nand启动,nor启动)。处理器在执行程序之前,会从相应存储介质搬移代码到ESRAM中(对 于从nor启动,也有可能从nor直接取指令执行)。对于6200测试平台,板级设置为SD卡启动,系统上电后从SD卡搬移8KB代码到ESRAM中,且 此时0地址映射到ESRAM(注意系统启动时,ESRAM具有三个地址,分别是0x0:映射,0XB2000000:物理。Boot的代码量较大,所以在 这前8KB代码中会设计代码搬移(sdboot设计成两个部分)。对于服务器目录下的sdboot代码,其执行流程如下:

  配置系统各频率,配置串口(调试),搬移后一部分代码到ESRAM中(本系统ESRAM大小为128KB,这一部分被搬移到ESRAM中指定部分,本系统为搬移到0XB2002000(sdio.c文件中ReadMultiSD(16,64,0XB2002000)的 参数意义是从SD卡的第16块开始共搬移64块到ESRAM0XB2002000处),第二部分的sdboot的链接脚本中的起始地址就是该地址,当然对 于基于相对PC跳转、或存取的指令这并无必要,但是一般都会这样写,而且安全,因为可能有不是基于PC跳转或存取的指令)。搬移完boot代码后,PC绝对跳转至0XB2002000,开始执行第二部分boot代码。第二部分代码涉及DDR2的配置,系统的启动流程(通过判定PMU部分的sleepflag寄 存器值来判定系统是以sleep模式启动还是以powerup方式启动)。若是以sleep模式启动则需要正确的配置ddr_trainig的地址,以免 覆盖内存中有效数据,并恢复相关区域的数据(内核寄存器,I/O寄存器,cache管理……),取得PC,开始执行。若是以powerup模式启动,则需 继续加载sd中的相关部(ReadMultiSD(80,800,0X42800000)到内存指定地址0X42800000开始处(这部分还未分析,应 该涉及到操作系统解压加载),PC绝对跳转至0X42800000处开始在DDR2中执行。

 

delete error  /comon/env_embedded.c

你可能感兴趣的:(Boot)