0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

armv8/armv9的执行状态的跳转和切换

Linux阅码场 来源:Linux阅码场 作者:baron 2022-05-16 09:54 次阅读

作者简介

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

思考:1、我们知道arm有2个执行状态:aarch32/aarch64,他们之间是如何跳转,如何切换的/2、我们知道arm有4个安全状态:secure security/non-secure security/ Root/ Realm,他们之间是如何跳转,如何切换的?3、我们知道arm有4个特权级别:secure security/non-secure security,他们之间是如何跳转,如何切换的?4、在开机启动是,有着不同的阶段,如bootrom、bootloader、kernel,他们都是64位的?他们之间都是怎样跳转和切换的?5、uboot怎样切换到Linux Kernel的?

说明:1、以下知识点,看似简单和清晰,实则零散在整个10000多页的 ARM TRM之中,另外也有许多理论知识在实践中不常见。所以也许会有描述不准确的地方(但但致都是准确的),精确的学习还是请以 ARM TRM官方文档为准。2、本文讲解的主要是armv8/armv9架构。

1、前言

注意本文标题所说的“程序之间的跳转模型”,主要讲解如下这么样子的大系统大程序之中:

5c6f4804-d4ac-11ec-bce3-dac502259ad0.png

启动时镜像之间是如何跳转的

runtime是镜像之间是如何跳转的

阅读本文需要一点点基础,请自行补习:

4个特权等级、4个安全状态、2个执行状态

启动模型中的BL1 BL2 BL31 BL32 BL33的概念

2、4个特权等级/4个安全状态之间的跳转模型

先弄懂最最最基础的本质原理,10000多页的 ARM TRM文档散装了很多场景, 我们总结之后再总结,最后浓缩成了下面这一张框图,通常我们也只要理解下面这张图就可以了:

5cc5de9e-d4ac-11ec-bce3-dac502259ad0.png

其中:

EL0的所有异常(同步异常和异步异常)都可以将core切到EL1中

EL1的所有异步异常、hvc/smc指令 都可以将core切到EL2中

EL2的所有异步异常、smc指令 都可以将core切到EL3中

所有的返回指令,都是ERET

其实呢,下面这种情况也是可以出现的,(只不过呢查略大多数代码,我都没有找到这样使用的例子)

5d1b1350-d4ac-11ec-bce3-dac502259ad0.png

另外呢svc也是可以被trapped到EL2的,EL3调用ERET返回EL1时,也是可以被EL2 trapped的,即下面这种情况也是可以出现的, (只不过呢查略大多数代码,我也没有找到这样使用的例子)

5d3f530a-d4ac-11ec-bce3-dac502259ad0.png

3、启动时镜像之间的跳转模型

由于这些底层的东西,都会和具体的SOC厂家的设计强相关,所以我们也就只好介绍common的场景。

很多人都学习过Secure Boot或是即将学习Secure boot,他们的重点也许都放在了如何签名验签的地方。那么你知道BL1到BL2是怎样跳转?uboot到kernel是怎样跳转的吗?

以下是参在TF-A代码做出的总结,当然了也是比较理想的场景:

5d988560-d4ac-11ec-bce3-dac502259ad0.png

可是在你的实际使用中:

BL32可能不是S-EL1,也是有可能是S-EL2的

BL33可能不是EL1,也是有可能是EL2的

BL1 BL2 BL33 BL32 BL33 每一级镜像,也许不是aarch64的,也许是aarch32的

如上的场景中,看似也就那么回事吧,无非就是不同特权等级之间,调用同步异常指令或返回指令,切来切去而已。那么如果是相同的特权等级,那么如何切换呢?

如uboot(EL1)到kernel(EL1), 至少有以下三种方式(其实我还能列出第4种第5种,这里留给大家思考):

5db45844-d4ac-11ec-bce3-dac502259ad0.png

如下再展示了一个稍微复杂的场景,aarch64和aarch32掺杂地使用,也许你的SOC就是这样设计的哦:

5e043396-d4ac-11ec-bce3-dac502259ad0.png

4、runtime程序之间的跳转模型

5e3bff7e-d4ac-11ec-bce3-dac502259ad0.png

在runtime模型中,你的cpu可能会同时在aarch32和aarch64之间运行,aarch32和aarch64之间的切换,其实也很好理解,模型如下所示,就是进入高特权等级,切换一下cpu context而已。

5e5cd668-d4ac-11ec-bce3-dac502259ad0.png

燃鹅,以上依然是最理想的场景吧。在实际使用中,也许你会有各种各样的需求,例如:我不想跳转特权等级,但还想切换执行状态。比如你的SOC实现定义了EL3,你的EL3既aarch32的程序,也有aarch64的程序,那么两个程序是如何切换的呢?

5e850bce-d4ac-11ec-bce3-dac502259ad0.png

这个时候,利用同步异常/异步异常的知识点已经无法满足需求了,可能就得利用架构中的warm reset威廉希尔官方网站 了。例如,你可以在aarch32的程序中去写RMREL3的相关比特,触发warm reset, cpu复位进入提前设置好的RVBAREL3的地址出,进入aarch64程序。其实还真有很多厂家,使用这种方式完成的镜像之间的跳转。

原文标题:armv8/armv9不同特权程序之间的跳转模型

文章出处:【微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9088

    浏览量

    367423
  • Linux
    +关注

    关注

    87

    文章

    11296

    浏览量

    209366
  • runtime
    +关注

    关注

    0

    文章

    17

    浏览量

    2169

原文标题:armv8/armv9不同特权程序之间的跳转模型

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Arm下一代指令架构“Armv9”已经问世

    Arm的下一代CPU指令集架构(ISA:指令集架构) Armv9开始推出。该公司正在逐步扩展当前的ISA Armv8,而扩展的高潮最终将成为Armv9的搭建桥梁。至于Armv9,一位C
    的头像 发表于 11-13 11:55 4.4w次阅读

    ARM重新定义ARMv8新架构,ARMv8新架构特性解说

    本文从ARMv8-A产生的背景开始,对它进行一个简单的介绍,使大家从整体上,对ARMv8有一个简单的了解。
    的头像 发表于 10-08 17:02 1.1w次阅读
    ARM重新定义<b class='flag-5'>ARMv8</b>新架构,<b class='flag-5'>ARMv8</b>新架构特性解说

    ARMV8/ARMV9为什么会有执行状态切换呢?

    在一个大系统中,我们所说这它是64位的,还是32位的,往往说的是kernel内核。
    发表于 09-08 15:40 825次阅读
    <b class='flag-5'>ARMV8</b>/<b class='flag-5'>ARMV9</b>为什么会有<b class='flag-5'>执行状态</b>的<b class='flag-5'>切换</b>呢?

    ARMv8架构资料分享

    ,大大提升了处理器的性能。从目前的的了解来看,基本上 ARMv8 与上代架构的差别是非常大的。除了 A64 指令集之外,还有许多地方都有较大改动,下面列出几个目前比较关注的点:  · 执行状态与异常级别
    发表于 03-21 14:50

    ARMv8架构的两种执行状态分别是什么

    、A64与A32的切换对于A32来说,ARM和thumb的切换,通过bx指令即可切换。但是对于A64和A32两种执行状态,只能通过异常,进行切换
    发表于 04-06 10:49

    armv8架构中Arch32切换到Arch64是如何运作的

    各位大神,armv8架构中,如果Arch32要去切换到Arch64,是如何运作的?状态会清空吗?
    发表于 06-06 16:13

    ARM Cortex-A系列ARMv8-A程序员指南

    ARMv8-A是针对应用配置文件的最新一代ARM架构。 在本书中,名称ARMv8用于描述整个体系结构,它现在包括32位执行状态和64位执行状态A
    发表于 08-22 07:22

    重磅!Arm正式推出Armv9架构

    V8架构发布于2011年10月。 Arm首席执行官Simon Segars说:“当我们预测到AI将定义未来时,我们必须为领先的计算打下基础,为即将到来的独特挑战做好准备。” “Armv9将处于下一个3000亿Arm芯片的最前沿,
    发表于 03-31 09:43 2637次阅读
    重磅!Arm正式推出<b class='flag-5'>Armv9</b>架构

    浅谈ARM发布Armv9的三大改进

    英国芯片设计公司Arm周二发布了Armv9,这是其在2011年发布Armv8之后十年来首次推出新的芯片架构。Arm表示,与以前的架构相比,Armv9提供了三大主要改进,即安全性更高,更好的AI性能,以及总体上速度更快。
    的头像 发表于 04-01 15:17 2343次阅读

    Arm微架构之Armv9时代

    在介绍Armv9系列前,我们先看一下ARM的Cortex-X定制CPU计划。Cortex-X方案先于Armv9发布,在Arm发布A78时,同时也发布了Cortex-X1这一颗性能强大的CPU,后续大家习惯称之为超级大核。
    的头像 发表于 02-06 14:43 9086次阅读

    Armv8架构和Armv9架构的区别分析

    新的Armv9兼容CPU所承诺的最大的新功能可能是开发人员和用户可以立即看到的——SVE2作为NEON的后继产品。
    发表于 03-10 14:02 4804次阅读

    Armv9Armv8服务器有何不同

    新的Armv9兼容CPU所承诺的最大的新功能可能是开发人员和用户可以立即看到的——SVE2作为NEON的后继产品。 可伸缩矢量扩展(SVE)的于2016年首次亮相,并首次在富士通的A64FX CPU内核中实现,该芯片已为日本排名第一的超级计算机Fukagu提供支持。
    发表于 03-29 14:02 751次阅读

    Armv8架构及虚拟化介绍

    ARMv8基本概念 (1)执行状态(execution state):处理器运行时的环境,包括寄存器的位宽、支持的指令集、异常模型、内存管理及编程模型等。ARMv8体系结构定义了两个执行
    的头像 发表于 04-16 10:45 6435次阅读

    ARMv8工作模式有哪些

    ),虚拟机管理器 EL3:最底层的安全固件,如 ARM Trusted Firmware(ATF/TF-A) ARMv8 提供了两种安全状态:Secure 和 Non-secure,也就是安全和非安全,Non-secure 也就是正常
    的头像 发表于 09-11 16:34 1475次阅读
    <b class='flag-5'>ARMv8</b>工作模式有哪些

    u-boot armv8链接脚本

    u-boot armv8链接脚本 在进行源码分析之前,首先看看u-boot的链接脚本,通过链接脚本可以从整体了解一个u-boot的组成,并且可以在启动分析中知道某些逻辑是在完成什么工作。 在
    的头像 发表于 12-07 11:19 674次阅读