zoukankan      html  css  js  c++  java
  • UBoot启动代码第一阶段流程

    http://blog.csdn.net/xautfengzi/article/details/7470134

    前段时间了看了UBoot的源码,放了一段时间之后忘得差不多了。现做一些注释,方便以后温习。

    第一阶段代码主要位于start.S中,其流程如下:

    1.设置中断向量表。

    2.设置CPU为管理员模式。

    3.禁狗。

    4.关中断。

    5.设置系统时钟。

    6.跳至cpu_init_crit。(注意bl指令,bl指令是相对跳转,绝对跳转用mov lr,pc。由于此阶段代码是位置无关代码,所以在跳至的细节部分要仔细理解)

    6.1.使缓存无效。

    6.2.禁用MMU和缓存。

    6.3.跳转至lowlevel_init设置内存时钟。

    该函数具体分析可参考这里:http://blog.csdn.net/xautfengzi/article/details/6306436

    7.初始化NAND控制器。

    8.设置堆栈、FP指针、ro、r1、r2这三个寄存器,作为实参。

    9.跳转至nand_read_II中将UBoot拷贝至SDRAM中。

    10.将刚才拷贝至SDRAM中的前4k内容与steppingStone里面的内容做比较。

    11.设置SP指针,清空bss段。

    12.跳至start_armboot,即第二阶段。


    第一阶段结束时,内存中的分布如下图所示:

    u-boot-memory

  • 相关阅读:
    MySQL 元数据
    MySQL 复制表
    MySQL 临时表
    MySQL 索引
    MySQL ALTER
    MySQL 事务
    MySQL 正则表达式
    Mysql Join
    Python(数据库之表操作)
    Python知识点复习之__call__
  • 原文地址:https://www.cnblogs.com/liulipeng/p/3313914.html
Copyright © 2011-2022 走看看