uboot源码分析1-启动第一阶段
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。
 
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-启动第一阶段的更多相关文章
- u-boot 源码分析(1) 启动过程分析
		u-boot 源码分析(1) 启动过程分析 文章目录 u-boot 源码分析(1) 启动过程分析 前言 配置 源码结构 api arch board common cmd drivers fs Kbu ... 
- v87.01 鸿蒙内核源码分析 (内核启动篇) | 从汇编到 main () | 百篇博客分析 OpenHarmony 源码
		本篇关键词:内核重定位.MMU.SVC栈.热启动.内核映射表 内核汇编相关篇为: v74.01 鸿蒙内核源码分析(编码方式) | 机器指令是如何编码的 v75.03 鸿蒙内核源码分析(汇编基础) | ... 
- u-boot源码分析之C语言段
		题外话: 最近一直在学习u-boot的源代码,从代码量到代码风格,都让我认识到什么才是真正的程序.以往我所学到的C语言知识和u-boot的源代码相比,实在不值一提.说到底,机器都是0和1控制的.感觉这 ... 
- Appium Server 源码分析之启动运行Express http服务器
		通过上一个系列Appium Android Bootstrap源码分析我们了解到了appium在安卓目标机器上是如何通过bootstrap这个服务来接收appium从pc端发送过来的命令,并最终使用u ... 
- Appium Android Bootstrap源码分析之启动运行
		通过前面的两篇文章<Appium Android Bootstrap源码分析之控件AndroidElement>和<Appium Android Bootstrap源码分析之命令解析 ... 
- Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7)
		http://blog.chinaunix.net/uid-20543672-id-3157283.html Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3 ... 
- u-boot源码分析
		Uboot源码分析 源码以u-boot-1.3.4为基准,主芯片采用at91sam9260,主要介绍uboot执行流程. uboot官网:http://www.denx.de/wiki/U-Boot/ ... 
- Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7)【转】
		原文地址:Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://bl ... 
- Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7)【转】
		原文地址:Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.c ... 
随机推荐
- JS获取CHECKBOX的值 AND 两个CHECKBOX 循环选中
			获取多选按钮的值 var chk_value = ''; $('input[data-action="checkRole"]:checked').each(function(){ ... 
- 2 CSS盒子模型&边框&轮廓&外边距&填充&分组嵌套&尺寸&display与visibility
			盒子模型 Box Model 所有HTML元素可以看做盒子,CSS模型本质上是一个盒子,封装周围的HTML元素 包括:边距,边框,填充和实际内容 盒子模型允许我们在其他元素和周围元素边框之间的空间放 ... 
- Servlet+Spring+Mybatis初试
			1.导入相关的jar包 druid mybatis mybatis-spring pageHelper mysql驱动包 spring-context-support spring-aspect sp ... 
- Netsparker破解版5.3 Netsparker Enterprise 5.3.0.24388[cracked]
			Netsparker破解版5.3 Netsparker Enterprise 5.3.0.24388[cracked]该版本更新时间为2019年7月8日下载地址:1 https://www.dr-fa ... 
- JVM,JRE,JDK
			JVM (Java Virtual Machine) : Java虚拟机,运行所有Java程序的假象计算机,是Java程序的运行环境,跨平台性由JVM实现. JRE (Java Runtime Env ... 
- Linux 7 和 CentOS 7 收到重要内核安全更新
			导读 Red Hat 和 CentOS 宣布了其 Red Hat Enterprise Linux 7 和 CentOS Linux 7 操作系统系列重要内核安全更新的可用性. 据悉,这些更新解决了两 ... 
- Android SDCard文件、目录操作【转】
			一.权限问题 参考:http://www.cnblogs.com/sky-zhang/p/3403393.html Android框架是基于Linux内核构建,所以Android安全系统也是基于Lin ... 
- 如何让tomcat加载项目变快
			修改配置: VM options填写内容: -Xms128m -Xmx256m -XX:PermSize=128m -XX:MaxPermSize=256m` 图示: ##1: ##2: 
- Nodejs回调加超时限制两种实现方法
			odejs回调加超时限制两种实现方法 Nodejs下的IO操作都是异步的,有时候异步请求返回太慢,不想无限等待回调怎么办呢?我们可以给回调函数加一个超时限制,到一定时间还没有回调就表示失败,继续后面的 ... 
- 页面渲染时js阻塞的解决方法
			一般地,一个包含外部样式表文件和外部脚本文件的HTML载入和渲染过程是这样的: 浏览器下载HTML文件并开始解析DOM. 遇到样式表文件link[rel=stylesheet]时,将其加入资源文件下载 ... 
