ARMv8/ARMv9特权级别与安全状态跳转模型解析

需积分: 9 4 下载量 67 浏览量 更新于2024-08-04 1 收藏 530KB PDF 举报
"本文主要探讨了ARM架构中armv8和armv9在不同特权级别和安全状态下的程序跳转模型,包括执行状态的切换、安全状态的转换以及在启动过程中的各个阶段之间的跳转。文章强调了理解四个特权级别、四个安全状态以及两个执行状态的基础知识,并概述了启动过程中BL1至BL33的概念。文中提供了一张简化后的跳转模型框图,展示了从EL0到EL3不同异常和指令如何导致核心在特权级别的切换,并提到了ERET返回指令的应用。" 在ARM架构中,armv8和armv9的特权程序之间的跳转模型是一个复杂而重要的概念。首先,我们要知道ARM处理器有两种执行状态:aarch32(32位)和aarch64(64位),它们可以通过特定指令进行相互切换。这两种状态在处理不同类型的软件和任务时各有优势,例如,aarch64提供了更高效的64位计算能力,而aarch32则兼容大量的32位应用程序。 此外,ARM处理器定义了四个安全状态:Secure、Non-Secure、Root和Realm。这些状态主要用于管理安全性和隔离,特别是在TrustZone等安全技术中。Secure状态提供了一个受保护的环境,用于运行关键的安全相关代码,而Non-Secure状态则用于常规操作。Root和Realm状态在某些高级安全架构中使用,它们提供了额外的权限层级和隔离级别。 在特权级别方面,ARM定义了四个异常级别(Exception Levels,EL):EL0、EL1、EL2和EL3。EL0是最低特权级别,通常用于用户空间程序,而EL1是操作系统内核的级别。EL2和EL3通常用于更高级别的监控和管理任务,如hypervisor和可信固件。异常和特定指令,如HVC(Hypervisor Call)和SMC(Secure Monitor Call),可以触发从一个EL向更高特权级别的切换。 在启动过程中,系统通常会经历多个阶段,从BootROM开始,然后是BootLoader(如U-Boot),最后进入Kernel(如Linux Kernel)。每个阶段都有特定的任务,如初始化硬件、加载后续阶段的代码和数据、设置系统状态等。在这些阶段之间,通过精心设计的跳转机制进行切换,确保系统的安全性和正确性。 例如,UBoot作为BootLoader的一个常见实现,它负责加载和验证Kernel映像,然后通过特定的跳转指令将控制权传递给Linux Kernel。这个过程可能涉及从非安全状态到安全状态的切换,或者从较低的特权级别升至EL1或EL3。 在实际应用中,理解这些跳转模型对于系统级编程、固件开发以及安全分析至关重要。然而,由于ARM架构的复杂性,详细的知识分散在数千页的ARM Technical Reference Manuals (TRM) 中。因此,开发者需要深入学习官方文档以获取精确信息,同时,文章提供的简化版跳转模型框图可以帮助初学者快速掌握基本概念。