Boatloader的工作流程
2024-08-30 16:58:18
(1)第一节阶段的功能
1、硬件设备的初始化
2、载入u-boot第二阶段的代码到我们的RAM空间
3、设置好栈
4、跳转到第二阶段的代码入口
(2)第二阶段的功能
1、初始化本阶段所使用的硬件设备
2、检測系统内存映射
3、将内核Flash读取到RAM中
4、为内核设置启动參数
5、调用我们多的内核
为什么我们的bootloader有一段汇编代码?为什么不用C语言的代码呢?
编译地址和执行地址
(1)编译地址
32位处理器。他的每一条指令是4个字节。他是顺序存储的。
我们的编译器,回到我们的每一条指令分配一个编译地址,他由编译器自己指定的。
(2)执行地址
事实上就是我们程序真正执行的地址,实用户指定
C语言编译地址:我们都希望把我们的编译地址和执行地址放在一起。可是因为我们的汇编代码不须要做我们C语言到汇编的转变。我们能够觉得是直接写地址。我们直接写的就是执行地址。这就是为什么我们Bootloader在执行之前会有汇编代码。
u-boot的运行代码:
1、IROM的代码自己主动将我们的nand flash的前16k复制到我门的SRAM中,这个时候我们的SRAM第一部分就分开运行。先初始化我们的DRAM
2 将nandflash 中全部的bootloadr复制到我们的DRAM中
3、跳转到DRAM中開始运行的bootloader中的第二部分代码
ARM异常模式
1、管理模式
复位电平的时候有效,产生复位异常,程序跳转到复位异常运行
2、没有定义指令异常
遇到我们不能处理的指令的时候。产生没有定义指令异常
3、软中断
运行我们SWI指令的时候。用于用户模式下的程序调用特权操作指令
4、与存取指令
处理器数据方位的地址不存在,或者地址不同意当前用户訪问
5、FIQ
6、IRQ
7、特权模式
最新文章
- 使用SerialPort 读取外置GPS信息和使用GeoCoordinateWatcher获取内置gps的信息
- 输入URL之后都发生了什么
- GMM算法k-means算法的比较
- jQuery.parseJSON(json) 使用方法
- Web Token JWT
- 8个节点MySQL-cluster安装和配置,含两个管理节点
- HDU 3966 Aragorn's Story (树链点权剖分,成段修改单点查询)
- [AngularJS + Unit Testing] Testing Directive's controller with bindToController, controllerAs and isolate scope
- LeeCode-Remove Element
- [Windows编程] 开发DLL必读《Best Practices for Creating DLLs》
- ASP.NET 2.0 页(Page)生命周期概述
- python requests库学习笔记(上)
- 深入理解JVM(七)——性能监控工具
- HanLP中人名识别分析
- Oracle中存储图片的类型为BLOB类型,Java中如何将其读取并转为字符串?
- android4.3 截屏功能的尝试与失败分析
- linux命令之间的分号,&;&;, ||
- 更换JDK版本时的问题:Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg'
- python 27 获取时区转换后的时间
- VS2015开发环境的安装和配置 2016-07-03更新
热门文章
- 14条最佳JS代码编写技巧
- MSSQL排序规则冲突
- 雅虎天气API调用
- maven optional可选依赖
- 分享一个mysql 复杂查询的例子
- 响应式布局框架 Pure-CSS 5.0 示例中文版-中
- Linux下让进程在后台可靠运行的几种方法
- Java类的连接与初始化 (及2013阿里初始化笔试题解析)
- sphider 丁廷臣简体中文完美汉化版带蜘蛛搜索引擎程序 v1.3.4
- 0061 Spring MVC的数据格式化--Formatter--FormatterRegistrar--@DateTimeFormat--@NumberFormat