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

 
 
 

最新文章

  1. ThinkPHP跨控制器调用方法
  2. 如何取消 DiscuzX 帖子被系统自动隐?
  3. Scrapy003-项目流程
  4. Python’s SQLAlchemy vs Other ORMs[转发 6]SQLAlchemy
  5. java数据库连接池性能对比
  6. Applied Deep Learning Resources
  7. 【无聊放个模板系列】HDU 3506 (四边形不等式优化DP-经典石子合并问题[环形])
  8. OCI_ERROE - errcode[1591],errmsg[ORA-01591:
  9. 有意思的字符串反转(JavaScript)
  10. Codeforces 23E Tree
  11. Eclipse插件 - FindBugs 检查代码隐藏的 Bug
  12. 【T-SQL】系列文章全文目录(2017-06-26更新)
  13. 卷烟厂生产管理系统基于ASP.NET
  14. Go-Ethereum 1.7.2 结合 Mist 0.9.2 实现众筹合约的实例
  15. Cxf weblogic 报错: when resolving method &quot;javax.xml.bind.JAXBElement
  16. 【Git】 GitLab简单使用
  17. SQL SERVER镜像配置(包含见证服务器)
  18. python学习笔记之一
  19. 【计算机网络】TCP通信的细节及TCP连接对HTTP事务处理性能影响
  20. unity中camera摄像头控制详解

热门文章

  1. 2019年mybatils面试高频题(java)
  2. 【转】IntelliJ IDEA 仿照vs2017快捷键设置,以及字体颜色设置
  3. android.view.WindowManager$BadTokenException 崩掉
  4. js实现超范围的数相加
  5. 劫后余生--New Start
  6. Day11 - K - Good Luck in CET-4 Everybody! HDU - 1847
  7. 记一个 protobuf 的 jar 包冲突
  8. SVN提交失败:Changing file &#39;XXX&#39; is forbidden by the server;Access to &#39;XXX&#39; forbidden
  9. 洛谷 P5242 [USACO19FEB]Cow Dating P
  10. 对C/C++指针问题的彻底理解(复习1)