zoukankan      html  css  js  c++  java
  • u-boot 启动过程

    u-boot 代码分为两个阶段第一阶段是汇编,入口是 arch/arm/cpu/armv7/start.S,第二阶段是 C 语言, 入
    口是 board.c

    第一阶段代码
    1. 异常向量表定义
    2. 设置 SVC32 模式(ARM 七种工作模式)
    3. 调用 cpu_init_crit 进行 cpu 相关初始化
    1) TLB(页面缓存)、关 MMU Cache
    2) 转入低级初始化 lowlevel_init 函数
    主要是对系统时钟、片外内存(DDR3)、串口、 nand(这里初始化 nand 主要是为第二阶段搬 uboot 到内存而准备的)等进行初始化。
    4. 判断启动开关进行自搬移
    5. 跳转到 C 入口 board_init_f( )

    第二阶段代码
    本 阶 段 主 要 有 两 个 核 心 函 数 , 分 别 是 board_init_f( ) board_init_r() , 这 两 个 函 数 都 是 在
    archarmLibBoard.c 

      1. board_init_f( )
    1) gd_t 数据结构空间分配
    2) 回调一组初始化函数
    3) gd_t 数据结构进行初始化

    4) relocate_code(U-boot 重定义代码,即自搬移)relocate_code 是一个汇编函数,在 archarmcpuarmv7start.S 文件中实现。 具体工作是先把代码搬
    运到 DDR 高端位置, 搬运 data 段, 清 0 BSS 段, 最后跳转重新定位后 u-boot 代码中的 board_init_r 函数
    运行,到些完成整个 u-boot 的启动过程。

      2. board_init_r( )
    这个函数是由上一步的 relocate_code 后,直接调用,这个函数也是重新定位代码后执行的第一个
    C 语言函数。
    1) 使能 Cache
    2) 板子初始化
    3) 串口初始化
    4) 外存初始化
    5) 环境变量初始化
    6) 控制台初始哗
    7) 中断使能
    8) 以太网初始化
    9) 进入 main_loop(),等待命令或自动加载内核或自动加载内核。

  • 相关阅读:
    CSS浏览器兼容解决总结
    Access的数据操作类(带异常处理)
    网页消息类
    生成验证码(纯中文)
    C#连接各种数据库(持续更新中)
    asp.net中实现文件批量上传!你会了吗?
    http 错误编号大全(转)
    SQL SERVER数据操作类
    web.config加密和解密
    C#中操作CMD命令行窗口
  • 原文地址:https://www.cnblogs.com/yixin-shenda/p/5504624.html
Copyright © 2011-2022 走看看