zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    [团队项目]典型用户
    0415 操作系统_实验二、作业调度模拟程序
    0415 结对2.0评价
    复利计算- 结对2.0--复利计算WEB升级版
    0408汉堡
    复利计算- 结对1.0
    0405《构建之法》第四章读后感
    复利计算器4.0 【java版】
    复利计算器的单元测试结果
    操作系统 实验一、命令解释程序的编写实验
  • 原文地址:https://www.cnblogs.com/openix/p/2365517.html
Copyright © 2011-2022 走看看