最近学习了整个ARM在安全和非安全模式中对各种中断的响应流程,觉得中断的路由是软件根据硬件的特性配置相关的寄存器,从而达到想让中断路由到EL1(linux),EL2(HY),EL3(ATF)中,这些配置是硬件开机初始化的时候配置的,现在先不讲怎么配置,而是讲解他们是怎么路由和转发的。
学习之后对大系统的中断路由有了很大的收获,在此记录一下,以免忘记。
这里先说说一些前置的知识。
1.CPU 有三种执行环境(Runtime):
? cpu执行在ATF:此时cpu处于EL3,此时的cpu一般的工作是切换REE和TEE,主要是保存和回复现场。
? cpu执行在REE:非安全侧的cpu执行环境,一般是我们的linux,此时cpu一般处于EL1。
? cpu执行在TEE:安全侧的cpu执行环境,一般是optee或者是商用的TEE,此时cpu一般处于EL1。
2.中断有三 种分类:
? NS-Group 1 : 想给REE处理的中断,也就是给non-secure EL1处理
? S-Group 1 : 想给TEE处理的中断,也就是给secure EL1处理
? Group 0: 想给ATF处理的中断,也就是给EL3处理
2.SCR_EL3(Secure Configuration Register)寄存器:
这里我只需要看FIQ,IRQ,NS这3个位就可以了,看数据手册:
7.中断路由表,这里cpu根据当前异常等级、NS位、IRQ位、FIQ位判断把中断路由到哪里:
二、cpu执行在TEE时,来了一个想给TEE处理的中断
四、 cpu执行在TEE时,来了一个想给REE处理的中断
六、cpu执行在TEE时,来了一个想给ATF处理的中断
- ATF处理完毕,主动回到REE:由于异常等级发生变化,cpu interface会重新发送中断,接下来相当于前面说的第一种情况,由于cpu在REE,此时SRC.NS=1,并且中断为NS-Group 1,所以cpu interface 判断为IRQ ,根据SRC.IRQ=0,所以中断路由到了EL1,所以cpu跳转到VBAR_EL1 + offset(IRQ)处理了,处理完成后恢复现场,回到ATF返回处继续执行。
- ATF处理完毕,主动回到TEE:由于异常等级发生变化,cpu interface会重新发送中断,接下来相当于前面说的第四种情况。自己回头看,这里不再次展开分析了。
八、cpu执行在ATF时,来了一个想给TEE处理的中断
解析:
1.由于cpu在ATF,此时中断为Group 0,所以cpu interface 判断为FIQ,这里要分三种情况分析:
-
ATF的SRC.FIQ=1 :根据SRC.FIQ=1,所以中断路由到了EL3,所以cpu跳转到VBAR_EL3 + offset(FIQ)了,在ATF的中断向量里面判断到中断为Group 0,判断到是给自己的中断,自己就处理了,处理完后清除中断标志位恢复现场,返回断点继续执行。
-
ATF的SRC.FIQ=0,等下返回TEE:由于异常等级发生变化,cpu interface会重新发送中断,接下来相当于前面说的第六种情况。自己回头看,这里不再次展开分析了。
-
ATF的SRC.FIQ=0,等下返回REE:这里需要说明一下,目前ATF的SRC.FIQ=0,由于需要返回REE,所以中间会有一个中间的阶段,就是ATF的SRC.FIQ=1,但是由于异常等级没有发生变化,cpu interface不会重新发送中断,直到返回到REE,CPU返回到REE后,接下来相当于前面说的第五种情况,这里不再次展开分析了。
到这里,九种情况都梳理了一遍,接下来就是自己去追代码,加深印象,了解实际代码中每一个详细的操作了。再见!!!
参考的文章链接如下:
周贺贺:armv8-armv9中断系列详解-硬件基础篇(new)
周贺贺:armv8/armv9中断系列详解-中断示例展示(new)
周贺贺:armv8/armv9不同特权程序之间的跳转模型(new)
00-armv8/armv9中断系列详解-序言?
10-ARM gicv3/gicv4的总结-基础篇 ?
20-armv8/armv9中断系列详解-硬件基础篇?
21-Linux Kernel/optee/ATF/hafnium等操作系统的异常向量表的速查
22-armv8/armv9中断系列详解-软件篇-Linux kernel中断相关软件导读?
40-armv8/armv9中断系列详解-中断示例展示(不含虚拟化部分)?
42-armv8/armv9中断系列详解-optee运行时来了一个REE(linux)中断–代码导读?
[答疑]-中断流程举例:在TEE侧时产生了FIQ,回到REE后为啥又产生了IRQ
[答疑]-中断流程举例:在REE(SCR.FIQ=1)侧时产生了FIQ,跳转到EL3后做了哪些事情br> Linux和optee双系统中1020-1023 的中断 的使用
EL3中设置的中断的routing模型
50-armv8/armv9中断系列详解-中断示例展示(虚拟化部分)?
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!