GIC的启动流程

一 与GIC有关的基本概念

GIC是ARM中统管异常的模块,所有加速器的中断信号都将发送给GIC,再由GIC路由给不同的核去处理该中断。

1 寄存器

VBAR_ELx:

ESR_ELx: 

ELR_ELx: 

MPIDR:

SCR_ELx: 

HCR_ELx:


2 异常的分类:

(1)同步异常:Abort(DABT,IABT,PC Alignment等) + 系统调用指令(svc、hvc、smc)

Abort:


系统调用指令:

------svc: Supervisor Call 指令使用户模式程序可以请求 OS 服务

------hvc: Hypervisor Call 指令使来宾 OS 可以请求系统管理程序服务。

------smc: 通过 Secure monitor Call 指令,普通世界可以请求安全世界服务。(security model 参考)

上述


(2)异步异常:IRQ,FIQ,Serror

二 ARMv8是如何识别异常的?

在OS刚起来时的一段*.s的汇编文件中有个异常向量表,ARM支持的几种异常在该表中都有对应的入口。并且向量表的地址存放在对应的VBAR_ELx,一旦编译链接成功,VBAR_ELx的值就已经固定。

当系统产生异常时,首先会根据ESR_ELx判断是否有异常发生,若有则根据VBAR_ELx找到中断向量表,再根据ESR_ELx的EC域识别中断类型,在向量表中寻找对应中断类型的入口,然后开始中断处理。

三 中断路由

每个核都有一个MPIDR寄存器,并且每个核的MPIDR寄存器的值都不相同,这可以作为每个核的唯一标志。

比如我希望某个中断由核1处理,那么GIC中的路由寄存器需要根据核1的MPIDR值去配置。

四 中断在哪个EL上处理?

这取决于当前中断分组,当前所处ELx以及各种安全寄存器的配置。

五 中断处理流程

中断从产生,处理到结束都离不开软硬件的配合。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,409评论 8 114
  • 1.ARM中一些常见英文缩写解释 MSB:最高有效位; LSB:最低有效位; AHB:先进的高性能总线; VPB:...
    Leon_Geo阅读 644评论 0 4
  • 虚拟化(Virtualization)这种起源于上世纪60年代IBM大型机系统的技术在处理器性能大幅度提升的当下,...
    古斟布衣阅读 4,581评论 0 7
  • 早上睡得迷迷糊糊仿佛听到了那些遗忘在时光里广播喇叭每天早上都播放的拉锯一般的起床声,让人厌恶烦躁却又熟悉而亲切。 ...
    阿长青阅读 393评论 0 7
  • 昨夜的错过,失控,忘记了留文。 而恍恍惚惚的又虚度了今日的时光,内心满是荒芜的杂草,我想播种下一些盛夏的果实,却发...
    江流_ddba阅读 165评论 0 0