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这样设置异常向量表。
1 _start: 2 b reset //0x00000000复位异常 3 ldr pc, _undefined_instruction //0x00000004未定义指令异常 4 ldr pc, _software_interrupt //0x00000008软中断异常 5 ldr pc, _prefetch_abort //0x0000000c预取异常 6 ldr pc, _data_abort //0x00000010数据异常 7 ldr pc, _not_used//中间多差的一条指令。0x00000014 8 ldr pc, _irq //0x00000018外部中断异常 9 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为什么这么设置了。
1 reset: 2 /* 3 * set the cpu to SVC32 mode 4 */ 5 mrs r0, cpsr //导入CPSR寄存器的值到R0 6 bic r0, r0, #0x1f//0b1 1111对M[0-4]清零 7 orr r0, r0, #0xd3//0b1 0011对M[0-4]置1 8 msr cpsr,r0//将R0写入CPSR中
今天有点不舒服,所以就到此为止了,明天继续分析。
内容有点少,大家谅解!!!
转载于:https://www.cnblogs.com/wrjvszq/p/4219919.html
u-boot分析(四)---设置异常向量表|设置SVC模式相关推荐
- [ARM异常]-linux中(aarch/aarch64)异常向量表介绍
文章目录 1.ARM的异常向量表基地址寄存器--VBAR 1.1.armv8 : VBAR寄存器 1.2.armv7 : VBAR寄存器 2.ARM的异常向量表的定义 2.1 armv8 :异常向量表 ...
- inside uboot (三) 异常向量表
1. 异常向量表概述 从上面的地址映射来看,中断向量表的地址为0xD0037400,因此如果我们想在SRAM中,也就是BL1中处理异常的话, 就需要把我们的异常向量表拷贝到这个地址上.或者我们可以在链 ...
- 【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )
一. 异常向量表 1. 异常相关概念 (1) 异常 (2) 异常类型简介 2. 异常处理 (1) 异常处理 二. 异常向量表代码编写 1. 初始化异常向量表模块代码 2. 链接器脚本 3. Makef ...
- [optee]-optee中的异常向量表的实现
Optee异常向量表 ARMV8-aarch64 1.optee中定义的异常向量表 2.optee中设置向量表基地址VBAR_EL1 ARMV8-aarch32.ARMV7-aarch32 1.opt ...
- 异常向量表的安装与调用
一.中断的发生.处理过程 中断发生的硬件过程 中断处理的过程和中断发生的过程正好相反 中断处理的软件处理流程 CPU执行完当前指令,检查到发生了中断,跳到向量表 保存现场.执行GIC提供的处理函数.回 ...
- optee的异常向量表-(irq,fiq,svc...)
文章目录 1. optee中的异常向量表thread_excp_vect 1.1.异步异常elx_irq.elx_fiq中断的处理 1.2.同步异常el0_sync_a64.el0_sync_a32中 ...
- 【中断】异常和中断的关系、异常向量表和中断向量表的关系
Linux中断知识汇总: [深入理解Linux内核][中断]内容汇总帖 目录 什么是异常? 什么是中断? 异常和中断的关系 什么是异常向量表? 什么是中断向量表? 异常向量表和中断向量表的关系 什么是 ...
- Linux内核异常向量表在哪,ARM64的启动过程之(六):异常向量表的设定
ARM64的启动过程之(六):异常向量表的设定 作者:linuxer 发布于:2015-11-24 18:22 分类:ARMv8A Arch 一.前言 本文主要描述了4.1.10内核初始化过程中如何初 ...
- 在linux、optee、ATF中的中断异常向量表
目录 1.在linux中的异常向量表 (1).arm64的异常向量表-(irq,fiq,svc......) (2).arm32的异常向量表-(irq,fiq,swi......) 2.在optee中 ...
最新文章
- 使用Hexo和Github搭建博客站
- android xposed 编译,Xposed修改特征编译
- 华为北大等打造的Transformer竟在CV上超过CNN
- 一年一度程序员“补课”季来袭,618 背后技术大公开!
- 智能车竞赛技术报告 | 全向行进组 - 哈尔滨工业大学 - 紫丁香四队
- Airflow 中文文档:概念
- linux 加jre环境变量
- mysql 服务器性能,mysql服务器性能配置
- 打印字符串(C语言,全排列)
- Android 调用系统相机拍照,生命周期重走OnCreate,导致无数据的解决办法
- 新电脑怎么分盘_【磁盘分区教程】如何给电脑进行分区?
- 基于张量秩一分解的多目标跟踪方法
- matlab2c使用c++实现matlab函数系列教程-perms函数
- BOM知识点全面总结(附实例、图解)
- Avast! 4 Server 服务器版license许可文件获得方法
- 蓝丝雨第八季高精端实战系列【商业实战DNF刷图】
- 【软考系统架构设计师】2015年下系统架构师综合知识历年真题
- 手机拍摄的身份证怎么制作为复印件?
- c++builder读取系统时间Now函数
- 让你相见恨晚的Photoshop 技巧
热门文章
- UE4学习-鼠标事件(按下、释放、物体抓取、计算重量、触发开门)
- idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(一)
- php pdo字符,关于php:真正的转义字符串和PDO
- 2012年A题葡萄酒的评价论文与代码
- html表格标签高级应用,asp.net core标签助手的高级用法TagHelper+Form
- python求素数之和_python如何求质数之和
- c# 多线程 执行事件 并发_C#.NET Thread多线程并发编程学习与常见面试题解析-1、Thread使用与控制基础...
- 新电脑怎么分盘_电脑新系统装了杀毒软件之后,原本非常流畅,怎么突然变卡了?...
- python读取第二行_使用Python操作Excel(二):读取数据表
- 谁更了解你,是女朋友吗。不,是这些推荐算法。