1、不简单的头文件包含

  • #include <config.h>:这个文件的内容其实是包含了一个头文件:#include <configs/x210_sd.h>".
  • #include/version.h中包含了include/version_autogenerated.h,这个头文件就是配置过程中自动生成的。里面就一行内容:#define U_BOOT_VERSION "U-Boot 1.3.4"

2、启动代码的16字节头部

3、异常向量表的构建

4、用0xdeadbeef对齐填充

5、分配空间放TEXT_BASE  c3e00000

6、分配空间放uboot在DDR中的物理地址 33e00000

7、设置CPU为SVC模式

8、设置L2、L1cache和MMU

9、识别并暂存启动介质,因此执行完这一段代码后r3中存储了0x03,以后备用。

10、设置栈,并调用lowlevel_init;目的:栈是在SRAM中设置的,因为当前整个代码还在SRAM中运行,此时DDR还未被初始化还不能用

10.1lowlevel_init详解

(1)先将LR入栈

(2)检查复位状态,防止DDR再次初始化; 冷上电时DDR是需要初始化才能用的;而热启动或者低功耗状态下的复位则不需要再次初始化  DDR。

(3)IO状态恢复

(4)关看门狗

(5)SRAM SROM相关GPIO设置

(6)开发板供电锁存

(7)判断当前代码执行在SRAM中还是在DDR。 原因:根据代码的位置判断时钟和DDR是否需要初始化

(8)[时钟初始化和DDR初始化]串口初始化打印'O'、trust zone初始化

    • 在 裸机中DMC0的256MB内存地址范围是0x20000000-0x2FFFFFFF;
    • 在uboot中DMC0的256MB内存地址范围为0x30000000-0x3FFFFFFF。
    • 在uboot中,可用的物理地址范围为:0x30000000-0x4FFFFFFF。一共512MB,其中30000000-3FFFFFFF为DMC0,40000000-4FFFFFFF为DMC1。
(9)返回地址,打印'K'

11、再次设置开发板供电锁存

12、再次设置栈,目的:DDR已经被初始化了,因此要把栈挪移到DDR中,所以要重新设置栈

13、再次判断当前地址以决定是否重定位,是为了决定是否进行uboot的relocate。

14、从D0037488这个内存地址读值,SD0通道启动时,这个值为EB000000;从SD2通道启动时,这个值为EB200000,然后调用movi_bl2_copy函数执行重定位

15、建立映射表并开启MMU

  • 地址映射的额外收益1:访问控制,在管理上对内存进行分块,然后每块进行独立的虚拟地址映射,然后在每一块的映射关系中同时还实现了访问控制(对该块可读、可写、只读、只写、不可访问等控制)
  • 地址映射的额外收益2:cache

16、再次设置栈,本次设置栈的目的是将栈放在比较合适(安全,紧凑而不浪费内存)的地方。

17、清理bss 注意表示bss段的开头和结尾地址的符号是从链接脚本u-boot.lds得来的。

18、跳转到第二阶段,执行_start_armboot

 
 
 

uboot源码分析1-启动第一阶段的更多相关文章

  1. u-boot 源码分析(1) 启动过程分析

    u-boot 源码分析(1) 启动过程分析 文章目录 u-boot 源码分析(1) 启动过程分析 前言 配置 源码结构 api arch board common cmd drivers fs Kbu ...

  2. v87.01 鸿蒙内核源码分析 (内核启动篇) | 从汇编到 main () | 百篇博客分析 OpenHarmony 源码

    本篇关键词:内核重定位.MMU.SVC栈.热启动.内核映射表 内核汇编相关篇为: v74.01 鸿蒙内核源码分析(编码方式) | 机器指令是如何编码的 v75.03 鸿蒙内核源码分析(汇编基础) | ...

  3. u-boot源码分析之C语言段

    题外话: 最近一直在学习u-boot的源代码,从代码量到代码风格,都让我认识到什么才是真正的程序.以往我所学到的C语言知识和u-boot的源代码相比,实在不值一提.说到底,机器都是0和1控制的.感觉这 ...

  4. Appium Server 源码分析之启动运行Express http服务器

    通过上一个系列Appium Android Bootstrap源码分析我们了解到了appium在安卓目标机器上是如何通过bootstrap这个服务来接收appium从pc端发送过来的命令,并最终使用u ...

  5. Appium Android Bootstrap源码分析之启动运行

    通过前面的两篇文章<Appium Android Bootstrap源码分析之控件AndroidElement>和<Appium Android Bootstrap源码分析之命令解析 ...

  6. Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7)

    http://blog.chinaunix.net/uid-20543672-id-3157283.html Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3 ...

  7. u-boot源码分析

    Uboot源码分析 源码以u-boot-1.3.4为基准,主芯片采用at91sam9260,主要介绍uboot执行流程. uboot官网:http://www.denx.de/wiki/U-Boot/ ...

  8. Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7)【转】

    原文地址:Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://bl ...

  9. Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7)【转】

    原文地址:Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.c ...

随机推荐

  1. 【协作式原创】自己动手写docker之run代码解析

    linux预备知识 urfave cli预备知识 准备工作 阿里云抢占式实例:centos7.4 每次实例释放后都要重新安装go wget https://dl.google.com/go/go1.1 ...

  2. Linux centos7iptables filter表案例、iptables nat表应用

    一.iptables filter表案例 vim /usr/local/sbin/iptables.sh 加入如下内容 #! /bin/bash ipt="/usr/sbin/iptable ...

  3. Centos610安装redis

    .tar.gz 解压 cd redis-5.0.4 编译 make PREFIX=/usr/local/redis install 测试 make test 测试执行失败,请安装tcl,具体参考第二步 ...

  4. 输出复选框选中的文件名 checkbox

    1. <tr>        <td><input  type="checkbox" name="cbxFileName"/> ...

  5. python中时间戳的探索

    声明 本文章只针对python3.6及以上版本. 问题提出 首先,我们先import一些必要模块: In [1]: from datetime import datetime, timezone, t ...

  6. Java集合--线程安全(CopyOnWrite机制)

    5 Java并发集合 5.1 引言 在前几章中,我们介绍了Java集合的内容,具体包括ArrayList.HashSet.HashMap.ArrayQueue等实现类. 不知道各位有没有发现,上述集合 ...

  7. 2017 青岛现场赛 Suffix

    Consider n given non-empty strings denoted by s1 , s2 , · · · , sn . Now for each of them, you need ...

  8. java并发(二):初探syncronized

    参考博客 Java多线程系列--"基础篇"04之 synchronized关键字 synchronized基本规则 第一条 当线程访问A对象的synchronized方法和同步块的 ...

  9. Keras入门——(3)生成式对抗网络GAN

    导入 matplotlib 模块: import matplotlib 查看自己版本所支持的backends: print(matplotlib.rcsetup.all_backends) 返回信息: ...

  10. 学习笔记:中国剩余定理(CRT)

    引入 常想起在空间里见过的一些智力题,这个题你见过吗: 一堆苹果,\(3\)个\(3\)个地取剩\(1\)个,\(5\)个\(5\)个地取剩\(1\)个,\(7\)个\(7\)个地取剩\(2\)个,苹 ...