uboot源码分析1-启动第一阶段
2024-09-03 03:50:40
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
最新文章
- ThinkPHP跨控制器调用方法
- 如何取消 DiscuzX 帖子被系统自动隐?
- Scrapy003-项目流程
- Python’s SQLAlchemy vs Other ORMs[转发 6]SQLAlchemy
- java数据库连接池性能对比
- Applied Deep Learning Resources
- 【无聊放个模板系列】HDU 3506 (四边形不等式优化DP-经典石子合并问题[环形])
- OCI_ERROE - errcode[1591],errmsg[ORA-01591:
- 有意思的字符串反转(JavaScript)
- Codeforces 23E Tree
- Eclipse插件 - FindBugs 检查代码隐藏的 Bug
- 【T-SQL】系列文章全文目录(2017-06-26更新)
- 卷烟厂生产管理系统基于ASP.NET
- Go-Ethereum 1.7.2 结合 Mist 0.9.2 实现众筹合约的实例
- Cxf weblogic 报错: when resolving method ";javax.xml.bind.JAXBElement
- 【Git】 GitLab简单使用
- SQL SERVER镜像配置(包含见证服务器)
- python学习笔记之一
- 【计算机网络】TCP通信的细节及TCP连接对HTTP事务处理性能影响
- unity中camera摄像头控制详解
热门文章
- 2019年mybatils面试高频题(java)
- 【转】IntelliJ IDEA 仿照vs2017快捷键设置,以及字体颜色设置
- android.view.WindowManager$BadTokenException 崩掉
- js实现超范围的数相加
- 劫后余生--New Start
- Day11 - K - Good Luck in CET-4 Everybody! HDU - 1847
- 记一个 protobuf 的 jar 包冲突
- SVN提交失败:Changing file &#39;XXX&#39; is forbidden by the server;Access to &#39;XXX&#39; forbidden
- 洛谷 P5242 [USACO19FEB]Cow Dating P
- 对C/C++指针问题的彻底理解(复习1)