目录
一 序言
1、序言
2、学习目标
二、硬件基础篇
1 中断的定义
2 FIQ和IRQ
3 中断术语的介绍
4 gic中断控制器的介绍
5 Core中的中断控制器接口的介绍
6 同步异常和异步异常的概念
6.1、同步异常和异步异常的定义
6.2、系统中有哪些异步异常?
6.3、系统中有哪些同步异常?
7 软件对中断的处理流程
8 向量表基地址寄存器的介绍
9 中断向量表的介绍
10 中断进入和中断退出时的硬件自动行为
10.1 当异常进来之后ARM CORE的硬件自动的行为(Exception entry)
10.2 当异常退出时ARM CORE的硬件自动的行为(Exception return)
11 中断的标记
12 中断的路由
13 中断的MASK(屏蔽)
14 中断路由(信号流)的总结
一、序言
带着问题去学习,关于异常/中断的一些思考:
- (1)、在如下的一个大系统种,cpu正在optee os中运行,突然来了一个想给Linux Kernel处理的中断(如一个蓝牙中断),那么此时的软硬件流程是怎样的?
- (2)、在上述的大系统中,你的Linux Kernel、optee os、hypervisor、ATF系统中都有异常向量表,那么当一个中断到来时,是跳转到哪个系统中的向量表呢
- (3)、什么是中断嵌套?怎样可以支持中断嵌套?什么是中断抢占?什么是中断优先级?什么是运行中断优先级?
- (4)、什么是FIQ?FIQ和IRQ的关系是什么?
- (5)、当来了一个中断,是如何跳转到向量表的?中间经过了怎样的路由?
- (6)、当你调用了svc/hvc/smc指令后,cpu是如何跳转到你期望的目标地址的?
- (7)、同步异常有哪些,异步异常有哪些,哪些优先级是一样的,哪些优先级是不一样的?
- (8)、异常向量表存放在哪里?为什么会有人说放在0x00000000处?
- (9)、什么是interrupt is asserted ?什么是interrupt is taken ?什么是PE Acknowledge this interrupt ?target 、routing又是什么意思?target from和target to呢?
做为一名底层安全工程师、一名一线支持客户的FAE,工作的内容涉及到TF-A、TEE、Linux Kernel、hypervisor、SPM等众多模块,cpu(或PE或core或PC)也会在这众多模块之间跳来跳去,由于这些代码大多数都是开源的,都是别人写好的,其实很多时候,也无需去看其底层的设计原理。但做为一名FAE,会遇到客户的灵魂一问,为了给客户一个专业的感觉,不得不去弄懂底层深层次的原理. 另外,有些时候遇到了性能相关问题,不懂底层的设计原理,也许就无法分析这类问题。
本人不是什么专家,也不是什么的大佬,也就是看了一些arm文档,加上自己的理解,然后总结出如下文章,当然我在总结的时候,一切都以官方资料为准,尽量不瞎说不乱说。。
最后,希望这系列文章,能够对大家有所帮助。好好学习、天天向上,卷起来同志们。
说明:
有人说,中断就包含IRQ和FIQ,其实这是不准确的,准确的说法应该是:产生到aarch64的异步异常(包括IRQ, FIQ, SError) 可看作中断。官方文档原话 :IntheArmv8-A architecture,asynchronous exceptions that are taken toAArch64state are also knownasinterrupts.
有人说FIQ是快速中断, FIQ比IRQ具有较高的优先级,而且他还能提出ARM官方文档来证明他说的正确性:
其实,这也是错误的!
正确的说法是FIQ和IRQ具有同样的优先级(默认的情况下,我们只讨论armv8-aarch64和armv9)
SPIs(Share Periphral Interrupts)中断进来之后,由inactive状态变成pending,此时中断标记为IRQ/FIQ,这是也就是中断assert了,然后该中断会根据HCR/SCR等的配置进行路由(路由到哪个Exception Level等),这个过程也就target,也可以叫做routing。路由之后,在部分场景下还会再检查PSTATE的MASK位,接下来就是PE acknowledge了,此时也就是中断被taken了。PE acknowledge后,cpu interface会将该中断置为Active.
(注意:本文重点介绍armv8/armv9异常中断,不会展开介绍gic,这里只是带一下简单概念) gic中断控制器有众多版本,gicv2/gicv3/gicv4是gic的架构,gic500/gic600是具体的gic IP。而在armv8/armv9中,基本都是使用的gicv3/gicv4。如下图所示,每一个core都定义了,它说使用的gic架构。
gic中断控制器与core连接的硬件框图
在gicv2中,gic中断控制器将中断信号(irq,fiq,serror)直接以signal的方式发送给core。而在gicv3中,gic的组件发生变化,将gic的cpu internface接口做到了core中,在这种情况下,gic将中断信号通过AXI Stream发送给core(cluster),然后cpu interface再继续发送irq/fiq/serror信息。
具备以下3个行为的称之为同步异常:• The exception is generated as a result of direct execution or attempted execution of an instruction. • The return address presented to the exception handler is guaranteed to indicate the instruction that caused the exception. • The exception is precise
其实就是说:
具备以下3个行为的称之为异步异常::• The exception is not generated as a result of direct execution or attempted execution of the instruction stream. • The return address presented to the exception handler is not guaranteed to indicate the instruction that caused the exception. • The exception is imprecise.
其实就是说:
那么precise 和 imprecise 又是什么意思呢??
比较绕、比较难懂,咱们换一个说法:按照预期产生的异常称之precise,反之imprecise
其实主要就是:irq, fiq, SError
Physical interrupts Are signals sent to the PE from outside the PE. They are:
Virtual interrupts Are interrupts that software executing at EL2 can enable and make pending. A virtual interrupt is taken from EL0 or EL1 to EL1. Virtual interrupts have names that correspond to the physical interrupts:
PSTATE.IL
为 1,(详细可参考D1-2486 页上的AArch64 状态的非法返回事件)正常情况下,当一个中断(异常)进来之后,PE(cpu)跳转到中断向量表,在中断向量表中会再次调用C语言函数,完成中断的处理,流程图如下所示:
ARM Core支持中断抢占,当一个中断正常处理的时候,可能又触发了一个高优先级的中断,示例如下所示:
思考你所用的操作系统就真的支持中断嵌套吗?如果想支持中断嵌套,需要满足哪些条件呢?后文会有详细介绍。
armv8定义了VBAREL1、VBAREL2、VBAR_EL3三个基地址寄存器
思考:1、VBAREL1、VBAREL2、VBAREL3写入的基地址,是物理地址还是虚拟地址?2、基地址不再放0x00000000的位置吗?3、异常向量表中,没有reset offset了?4、异常向量表中的每一个offset为啥是0x80(128)地址空间?以前是多少?5、VBARELx中,为啥末尾11个bit是reserved?
我们可以看出,实际上有四组表,每组表有四个offset,分别对应sync,IRQ,FIQ和serror。
另外我们还可以看到的一点是,每一个异常入口不再仅仅占用4bytes的空间,而是占用0x80 bytes空间,也就是说,每一个异常入口可以放置多条指令,而不仅仅是一条跳转指令
注意,到了armv9上,增加了 FEAT_DoubleFault
之后,异常向量表稍微变化了一丁点变化,如图中的标注所示:
也就是说,当 FEAT_DoubleFault
开启之后,且 SCR_EL3.EASE
比特设置为1, 那么此时target到EL3的 Synchronous External abort将会跳转到Serror offset。
在中断产生之后,PC(或PE 或 Core 或 cpu)将跳转到VBAR + 中断offset处。事实上在armv8-aarch64或armv9体系中,有3个VBARELx寄存器,另外对于VBAREL1虽然只有一个,但是在不同Security状态的操作系统中,有着不同的cpu context,即也是可以看做成两份。如果是要考虑虚拟化,那么VBAREL2可能也会有两份,VBAREL1可能会有多份。
如下,是在不考虑EL2/虚拟化的时候,画的一张向量表总截图,即当一个中断来时,硬件会自动选择哪一个VBAR_ELx寄存器,硬件会自动选择哪一组向量表,硬件会自动选择哪一个offset
[for common]
[for 同步异常]
[for Serror]
FEAT_DoubleFault
已实现 如果Reliability, Availability, and Serviceability Extension被实施,并且在采取 SError 时中断,记录在ESR_ELx 中的综合症指示除IMPLEMENTATION之外的 SError定义或未分类的 SError 中断综合症HCR_EL2.VSE
位清零[for FEAT]
(On executing an Exception return instruction at ELx)
在gicv3中断控制器中,对中断进行了分组:Group0、Secure Group1、Non-secure Group1。当一个中断进来的时候,cpu interface会根据中断的分组类型和当前PE的security状态来决定是标记为IRQ还是FIQ
我们知道系统中有三个基地址VBAREL1、VBAREL3、VBAREL1(secure),那么到底是使用哪一个呢?由Routing when both EL3 and EL2 are implemented 表来决定,中断routing到了EL1则使用VBAREL1,routing到了EL3则使用VBAREL3,routing到了secure EL1则使用VBAREL1(secure)
为了更直观的理解,总结成了下面的一个流程图:
在PSTATE中,A/I/F比特分别可以对SError、IRQ、FIQ进行MASK
但是在有些场景下,MASK将会失效,如在一些中断被强制target到EL3的配置下,中断的taken就不在关心PSTATE的mask位了。
以下表格做出了详细的说明:
其中:
FEAT_DoubleFault
相关的,暂不介绍当peripheral产生一个中断后,PE是如何跳转到某个系统中的向量表的?如下框图展示了这一切:当一个中断到来后,中断信号交给gic,gic会进行中断的识别、优先级、affinity路由等,然后通过AXI stream将信号交给core(cpu internface),cpu interface负责标记中断是irq还是fiq,这就是中断断言了(assert了),然后就是中断的路由规则,target到相应的EL级别,然后再检查Mask标记位,然后该中断就被taken了(即PE acknowledge了),接下来PE还会根据EL是否发生改变、SPELx使用的哪一个等信息来决定是跳转到哪一组向量表 最后PE跳转到相应的VBARELx + xxx offset了。
本文由哈喽比特于2年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/NvK-xwAKOJmDL_N91jzCfg
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。