ARM-A架构入门基础(二)异常处理

  • Post author:
  • Post category:其他



14天学习训练营导师课程:


周贺贺《ARMv8/ARMv9架构-快速入门》



1. 异常处理种类



1.1 中断

在ARM中,FIQ的优先级要高于IRQ,在SOC内部会有一个中断控制器负责中断优先级调度,然后发送中断信号给处理器。中断属于异步模式的异常。



1.2 中止

中止异常分为数据中止和指令中止,MMU能够捕获错误并汇报给处理器。



1.3 复位

复位是处理器中优先级最高的异常,通常分为上电复位和软件复位。



1.4 软件产生的异常

ARMv8提供了3中软件产生的异常,发生此异常的原因是软件企图进入更高的异常等级。

SVC 允许用户模式下的程序请求os服务

HVC 允许客户机(Linux os)请求主机服务

SMC 允许普通世界的程序请求安全服务



1.5 同步异常和异步异常

故名思议,同步异常必须等待cpu处理完当前异常才可以继续执行指令。

常见的同步异常:

访问其他等级的寄存器,比如当前是EL1,如果访问EL2的寄存器就会出现异常

SP未对齐

SVC、HVC和SMC

地址翻译错误/地址权限

常见的异步异常:

物理中断 IRQ、FIQ和系统错误

虚拟中断 vIRQ、vFIQ、vSError



2. ARMv8异常模型

在这里插入图片描述

ARMv8-a Exception level有关的说明如下:

1)首先需要注意的是,AArch64中,已经没有User、SVC、ABT等处理器模式的概念,但ARMv8需要向前兼容,在AArch32中,就把这些处理器模式map到了4个Exception level。

2)Application位于特权等级最低的EL0,Guest OS(Linux kernel、window等)位于EL1,提供虚拟化支持的Hypervisor位于EL2(可以不实现),提供Security支持的Seurity Monitor位于EL3(可以不实现)。

3)只有在异常发生时(或者异常处理返回时),才能切换Exception level(这也是Exception level的命名原因,为了处理异常)。当异常发生时,有两种选择,停留在当前的EL,或者跳转到更高的EL,EL不能降级。同样,异常处理返回时,也有两种选择,停留在当前EL,或者调到更低的EL。



3. GIC中断控制器

由于SOC中外设及与其相关的中断数量众多,且各中断又有多种不同的配置方式,为了减轻CPU的负担,现代处理器中断的配置和管理一般都通过中断控制器实现。

GIC是arm公司推出可与cortex-A和cortex-R处理器配合使用的中断控制器,当前一共有4个版本,分别为GICv1 – GICv4。GICv3是基于armv8的SOC设计中应用较为广泛的一种中断控制器,GICv4与GICv3的功能基本相同,只是为了提高虚拟化的性能,增加了直接注入虚拟中断的能力。

在这里插入图片描述



版权声明:本文为In_engineer原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。