u-boot分析(四)---设置异常向量表|设置SVC模式
u-boot分析(四)
通过前三篇的分析,我们对u-boot已经有了整体的认识和掌握,但是我们仍然对于其部分硬件是如何初始化的不太清楚,所以接下来几篇博文我将会对我们在http://www.cnblogs.com/wrjvszq/archive/2015/01/10/4215627.html一文中总结出的u-boot的工作流程中的重要环节,结合文档加以分析。
今天我们会用到的文档:
1. ARM Architecture Reference Manual:http://download.csdn.net/detail/wrjvszq/8354473
今天我们将会分析以下内容:
1. 设置中断向量表
2. 设置CPU为SVC模式
l 设置异常向量表
我们知道arm上电后u-boot干的第一件事就是设置异常向量表,那么什么是异常?异常又有什么类型呢?等等一大堆问题,下面我们一一解决。
1. 异常
异常其实是中断的一种,我们的中断按中断事件来源进行分类,主要有两类:
1) 中断:由CPU以外的事件引起的中断,如I/O中断、时钟中断、控制台中断等。
2) 异常:来自CPU的内部事件或程序执行中的事件引起的过程。如由于CPU本身故障、程序故障和请求系统服务的指令引起的中断等。
2. 异常的类型
根据《ARM Architecture Reference Manual》手册中的2.6节我们找到了如下表格,说明我们的arm处理器支持的异常有七种

我们的arm处理器有两种入口地址,默认情况下我们选择Normal address,只有当设置了协处理器CP15的相关寄存器以后,才会启用High vector address。
特别提醒:Data Abort和IRQ这两种异常的入口地址一个为0x00000010一个为0x00000018中间差了4个字节,在arm指令解析一节中我们提到arm的一条指令为4个字节刚好差了一条指令,所以我们看到u-boot这样设置异常向量表。
_start:
b reset //0x00000000复位异常
ldr pc, _undefined_instruction //0x00000004未定义指令异常
ldr pc, _software_interrupt //0x00000008软中断异常
ldr pc, _prefetch_abort //0x0000000c预取异常
ldr pc, _data_abort //0x00000010数据异常
ldr pc, _not_used//中间多差的一条指令。0x00000014
ldr pc, _irq //0x00000018外部中断异常
ldr pc, _fiq //0x0000001c快速中断异常
3. 异常向量:
当异常发生的时候,由硬件机制处理器自动的跳到一个固定地址去执行相关异常处理程序,而这个固定地址就是所谓的异常向量。
l 设置CPU为SVC模式
1. U-boot工作的模式:
由于我们的u-boot需要执行更多的指令,访问更多的寄存器对芯片进行初始化设置,所以要工作在SVC模式。
注:在http://www.cnblogs.com/wrjvszq/p/4199682.html 一文介绍过arm处理器的工作模式
2. 如何设置CPU工作在SVC模式
同样在http://www.cnblogs.com/wrjvszq/p/4199682.html 一文中我们介绍过通过CPSR寄存器设置处理器的工作模式,其实就是设置CPSR中的M[0-4]为0b10011这也就很容易明白u-boot为什么这么设置了。
reset:
/*
* set the cpu to SVC32 mode
*/
mrs r0, cpsr //导入CPSR寄存器的值到R0
bic r0, r0, #0x1f//0b1 1111对M[0-4]清零
orr r0, r0, #0xd3//0b1 0011对M[0-4]置1
msr cpsr,r0//将R0写入CPSR中
今天有点不舒服,所以就到此为止了,明天继续分析。
内容有点少,大家谅解!!!
u-boot分析(四)---设置异常向量表|设置SVC模式的更多相关文章
- 关于 uboot 的异常向量表
ldr r,address 表示将 address 地址中的内容存入 r0 中
- Part5核心初始化_lesson1---异常向量表
1.1异常 异常向量: 异常向量表: 代码的编写 start.S文件 gboot.lds链接器脚本文件 makefile工程文件:
- STM32向量表详细分析
预备知识: DCD指令:用于分配一片连续的字存储单元(32bit),并将表达式的值初始化给该字存储单元,类似于C中定义数组并初始化.比如: DCD 0 的意思是:分配一个字存储单元,并将该单元初始化为 ...
- 【转】busybox分析——arp设置ARP缓存表中的mac地址
[转]busybox分析——arp设置ARP缓存表中的mac地址 转自:http://blog.chinaunix.net/uid-26009923-id-5098083.html 1. 将arp缓存 ...
- CSS 四种引入样式表优缺点分析
CSS 四种引入样式表 CSS 有四种方式引入样式表,如下: 外部样式表 内部样式表 行内样式表 导入样式表 外部样式表优缺点 优点 实现了结构与表现的代码完全分离 方便复用及维护 因为分离到各自独立 ...
- Spring Boot(十四):spring boot整合shiro-登录认证和权限管理
Spring Boot(十四):spring boot整合shiro-登录认证和权限管理 使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉 ...
- 设置MySQL数据表主键
设置MySQL数据表主键: 使用“primary key”关键字创建主键数据列.被设置为主键列不允许出现重复的值,很多情况下与“auto_increment”递增数字相结合.如下SQL语句所示: My ...
- spring boot / cloud (十二) 异常统一处理进阶
spring boot / cloud (十二) 异常统一处理进阶 前言 在spring boot / cloud (二) 规范响应格式以及统一异常处理这篇博客中已经提到了使用@ExceptionHa ...
- 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
随机推荐
- Centos6.8 yum安装LNMP
1.Centos6系统库中默认是没有nginx的rpn包的,所以我们需要先更新下rpm依赖库 (1):使用yum安装nginx,安装nginx库 rpm -Uvh http://nginx.org/p ...
- 网络工程18级《C++程序设计II》实践作业1
A.类的应用1 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 162 (133 users) Total Accepted: 136 ...
- Hibernate上传数据到数据库,从数据库读取数据到本地模板代码
1.Hibernate上传数据到数据库: //创建一个session对象 Session session1=HibernateTools.getSession(); //Fenciresult数据库表 ...
- HDU-Fibonacci Again(打表找规律)
There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2). ...
- P2906 [USACO08OPEN]牛的街区Cow Neighborhoods
传送门 曼哈顿距离好像不好直接算,我们可以把牛的坐标转化一下以方便计算距离 (x,y) --> (x+y,x-y) 那么距离就可以表示成 $max(\left |x_1-x_2 \right ...
- PV并发UV
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'返回结果:SYN_RECV 2 (SYN连接请求收到2个 等待确 ...
- SQL server 2008 r2 安装图文详解
文末有官网下载地址.百度网盘下载地址和产品序列号以及密钥,中间需要用到密钥和序列号的可以到文末找选择网盘下载的下载解压后是镜像文件,还需要解压一次直接右键点击解如图所示选项,官网下载安装包的可以跳过前 ...
- python3 unittest数据驱动
我们在自动化测试的时候,有没有遇到这样的问题?例如一个登录的接口要做自动化,会有很多case(用例),密码错误,密码正确这种.在继承unittest.TestCase的类中,凡是以“test”开头的方 ...
- git只clone仓库中指定子目录和指定文件的实现
## step :初始化空库 [root@vm_test backup]# mkdir devops [root@vm_test backup]# cd devops/ [root@vm_test d ...
- spring中注解注入 context:component-scan 的使用说明
通常情况下我们在创建spring项目的时候在xml配置文件中都会配置这个标签,配置完这个标签后,spring就会去自动扫描base-package对应的路径或者该路径的子包下面的java文件,如果扫描 ...