【生意多】-免费发布分类信息
当前位置: 首页 » 新闻 » IT资讯 » 正文

armv8-armv9中断系列详解-硬件基础篇

放大字体  缩小字体 发布日期:2022-05-01 09:28:22    浏览次数:4
导读

  baron (网名:代码改变世界ctw),九年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计和开发  做为一名底

  baron (网名:代码改变世界ctw),九年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计和开发

  做为一名底层安全工程师、一名一线支持客户的FAE,工作的内容涉及到TF-A、TEE、Linux Kernel、hypervisor、SPM等众多模块,cpu(或PE或core或PC)也会在这众多模块之间跳来跳去,由于这些代码大多数都是开源的,都是别人写好的,其实很多时候,也无需去看其底层的设计原理。但做为一名FAE,会遇到客户的灵魂一问,为了给客户一个专业的感觉,不得不去弄懂底层深层次的原理. 另外,有些时候遇到了性能相关问题,不懂底层的设计原理,也许就无法分析这类问题。

  本人不是什么专家,也不是什么的大佬,也就是看了一些arm文档,加上自己的理解,然后总结出如下文章,当然我在总结的时候,一切都以官方资料为准,尽量不瞎说不乱说。。

  了解从peripheral产生中断后,有哪些是硬件自动的行为,有哪些是架构推荐定义的软件流程,以及各类操作系统软件中的处理流程

  本系列文章主要讲述图中的 3 和 4 ,主要包含以下文章:01-armv8/armv9中断系列详解-序言 02-armv8/armv9中断系列详解-硬件基础篇 03-armv8/armv9中断系列详解-中断示例展示(不含虚拟化部分) 04-armv8/armv9中断系列详解-中断示例展示(虚拟化部分) 05-armv8/armv9中断系列详解-optee运行时来了一个REE(linux)中断–代码导读 06-armv8/armv9中断系列详解-软件篇-Linux kernel中断相关软件导读

  有人说FIQ是快速中断, FIQ比IRQ具有较高的优先级,而且他还能提出ARM官方文档来证明他说的正确性:

  正确的说法是FIQ和IRQ具有同样的优先级(默认的情况下,我们只讨论armv8-aarch64和armv9)

  (注意:本文重点介绍armv8/armv9异常中断,不会展开介绍gic,这里只是带一下简单概念) gic中断控制器有众多版本,gicv2/gicv3/gicv4是gic的架构,gic500/gic600是具体的gic IP。而在armv8/armv9中,基本都是使用的gicv3/gicv4。如下图所示,每一个core都定义了,它说使用的gic架构。

  比较绕、比较难懂,咱们换一个说法:按照预期产生的异常称之precise,反之imprecise

  正常情况下,当一个中断(异常)进来之后,PE(cpu)跳转到中断向量表,在中断向量表中会再次调用C语言函数,完成中断的处理,流程图如下所示:

  ARM Core支持中断抢占,当一个中断正常处理的时候,可能又触发了一个高优先级的中断,示例如下所示:

  思考你所用的操作系统就真的支持中断嵌套吗?如果想支持中断嵌套,需要满足哪些条件呢?后文会有详细介绍。

  思考:1、VBAREL1、VBAREL2、VBAREL3写入的基地址,是物理地址还是虚拟地址?2、基地址不再放0x00000000的位置吗?3、异常向量表中,没有reset offset了?4、异常向量表中的每一个offset为啥是0x80(128)地址空间?以前是多少?5、VBARELx中,为啥末尾11个bit是reserved?

  我们可以看出,实际上有四组表,每组表有四个offset,分别对应sync,IRQ,FIQ和serror。

  如果发生异常后并没有exception level切换,并且发生异常之前使用的栈指针是SP_EL0,那么使用第一组异常向量表。

  如果发生异常后并没有exception level切换,并且发生异常之前使用的栈指针是SP_EL1/2/3,那么使用第二组异常向量表。

  如果发生异常导致了exception level切换,并且发生异常之前的exception level运行在AARCH64模式,那么使用第三组异常向量表。

  如果发生异常导致了exception level切换,并且发生异常之前的exception level运行在AARCH32模式,那么使用第四组异常向量表。

  另外我们还可以看到的一点是,每一个异常入口不再仅仅占用4bytes的空间,而是占用0x80 bytes空间,也就是说,每一个异常入口可以放置多条指令,而不仅仅是一条跳转指令

  注意,到了armv9上,增加了FEAT_DoubleFault之后,异常向量表稍微变化了一丁点变化,如图中的标注所示:

  在中断产生之后,PC(或PE 或 Core 或 cpu)将跳转到VBAR + 中断offset处。事实上在armv8-aarch64或armv9体系中,有3个VBARELx寄存器,另外对于VBAREL1虽然只有一个,但是在不同Security状态的操作系统中,有着不同的cpu context,即也是可以看做成两份。如果是要考虑虚拟化,那么VBAREL2可能也会有两份,VBAREL1可能会有多份。

  如下,是在不考虑EL2/虚拟化的时候,画的一张向量表总截图,即当一个中断来时,硬件会自动选择哪一个VBAR_ELx寄存器,硬件会自动选择哪一组向量表,硬件会自动选择哪一个offset

  10 中断进入和中断退出时的硬件自动行为10.1 当异常进来之后ARM CORE的硬件自动的行为(Exception entry)

  但是在有些场景下,MASK将会失效,如在一些中断被强制target到EL3的配置下,中断的taken就不在关心PSTATE的mask位了。

  本群定位内核性能与稳定性技术交流,覆盖云/网/车/机/芯领域资深内核专家,由阅码场资深讲师彭伟林主持。

  本群定位Perf、cache和CPU架构技术交流,覆盖云/网/车/机/芯领域资深用户,由阅码场资深讲师甄建勇主持。

  本群定位Xenomai与实时优化技术交流,覆盖云/网/车/机/芯领域资深用户,由阅码场资深讲师邓世强和彭伟林共同主持。

  本群定位Tee和ARM架构技术交流,覆盖云/网/车/机/芯领域资深用户,由阅码场资深讲师周贺贺主持。

 
关键词: arm意思
(文/小编)
打赏
免责声明
• 
本文为小编原创作品,作者: 小编。欢迎转载,转载请注明原文出处:https://www.31duo.com/news/show-3412324.html 。本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们。
 

(c)2016-2019 31DUO.COM All Rights Reserved浙ICP备19001410号-4

浙ICP备19001410号-4