UEFI学习笔记(十七):SMCCC概述

news/2024/11/21 4:19:22/

UEFI学习笔记(十七):SMCCC概述

    • 一、什么是 SMC 调用规范?
      • 1、定义:
      • 2、目标:
      • 3、适用范围:
    • 二、SMC调用约定与分类
      • 1、SMC 调用通过以下两种约定传递参数和返回值:
      • 2、SMC调用分类
    • 三、SMC调用的函数标识符
    • 四、什么是 SiP 服务调用?
      • 1、定义:
      • 2、目标:
      • 3、适用范围:
  • 参考文章:

一、什么是 SMC 调用规范?

1、定义:

在 ARM 平台中,系统通常运行在不同的安全状态:

非安全状态 (Non-secure State): 普通操作系统和应用程序运行在此状态,无法访问安全资源。

安全状态 (Secure State): 受信操作系统 (Trusted OS) 和敏感服务运行在此状态,确保数据安全。

为了让普通系统能够请求安全操作系统或安全服务的协助,需要一种标准化的通信机制。这种机制就是 Secure Monitor Call (SMC)。SMC 调用通过 SMC 指令触发,由运行在异常级别 EL3 的安全监视器 (Secure Monitor) 处理。

2、目标:

统一操作系统、虚拟机管理器 (Hypervisors)、受信操作系统 (Trusted OS)、安全监视器和系统固件之间的接口,减少软件层的碎片化。

3、适用范围:

覆盖 ARMv7 和 ARMv8 架构中的 EL0 到 EL3 异常级别。

二、SMC调用约定与分类

1、SMC 调用通过以下两种约定传递参数和返回值:

(1) SMC32:
32 位接口,可用于 32 位或 64 位客户端代码。
最多传递 6 个 32 位参数。

在 AArch32 状态:参数通过 R0-R6 寄存器传递,返回值通过 R0-R3 返回。R4-R14 寄存器必须由调用方保存。

在 AArch64 状态:参数通过 W0-W6 寄存器传递,返回值通过 W0-W3 返回。

(2) SMC64: 64 位接口,仅适用于 64 位客户端代码。最多传递 6 个 64 位参数。

只支持 AArch64 状态:参数通过 X0-X6 寄存器传递,返回值通过 X0-X3 返回。X18-X30 寄存器必须由调用方保存。

2、SMC调用分类

快速调用 (Fast Calls): 用于执行原子性的安全操作。不可中断。常用于短时间内完成的操作,例如设置硬件寄存器或切换安全模式。

标准调用 (Standard Calls): 支持可抢占的长时间操作,例如文件系统访问或数据加密。涉及异步基础设施,例如队列和消息。

三、SMC调用的函数标识符

SMC函数标识符是一个32位整数值,它指示调用方正在请求哪个函数。它总是作为第一个参数传递给R0或W0中的每个SMC调用。格式如下:

位范围描述
Bit [31]调用类型:0 表示标准调用,1 表示快速调用。
Bit [30]调用约定:0 表示 SMC32,1 表示 SMC64。
Bit [29:24]所属实体编号(ARM、CPU、SiP、OEM 等)。
Bit [23:16]保留位,通常为 0(快速调用强制为 0)。
Bit [15:0]功能编号,用于进一步标识调用内容。

四、什么是 SiP 服务调用?

1、定义:

SiP 服务调用是 Secure Monitor Call (SMC) 中的一个子集。SiP 服务调用是通过 SMC 指令触发的一组特定功能,由芯片制造商定义,用于满足特定硬件平台的需求。这些功能通常与硬件安全、平台管理、设备初始化相关。

2、目标:

为芯片制造商提供一个标准化的接口,通过 Secure Monitor 调用定制的底层服务,而不影响其他标准功能(如 ARM 定义的标准服务)。

3、适用范围:

(1)平台初始化操作,例如安全启动 (Secure Boot)。

(2)电源和时钟管理。

(3)特定硬件的安全配置和访问。

参考文章:

SMC CALLING CONVENTION


http://www.ppmy.cn/news/1548656.html

相关文章

探索DDCA:深入理解内存架构、子系统与内存控制器

数字设计和计算机体系结构(DDCA)中,内存架构、子系统及内存控制器是核心组成部分。在现代计算机系统中,高效的内存管理对于提升整体性能和响应速度至关重要。本文将深入探讨这些关键元素,帮助您更好地理解它们的工作原…

Oracle19C AWR报告分析之Operating System Statistics

Oracle19C AWR报告分析之Operating System Statistics 一、分析数据二、详细分析三、总结建议 Oracle 19C的AWR(Automatic Workload Repository)报告中的Operating System Statistics部分提供了操作系统层面的性能统计数据。这些指标对于分析数据库性能的…

Ubuntu 的 ROS 操作系统 turtlebot3 导航仿真

引言 导航仿真是机器人自动化系统中不可或缺的一部分,能够帮助开发者在虚拟环境中测试机器人在复杂场景下的运动与路径规划。 在 Gazebo 仿真环境中,TurtleBot3 配合 ROS 操作系统提供了强大的导航功能。在进行导航仿真时,首先需要准备地图&…

【python】Bokeh 与 Plotly:创建交互式数据可视化工具

Bokeh 与 Plotly:创建交互式数据可视化工具 在现代数据分析中,交互式数据可视化已经成为一个重要的工具。它不仅能帮助我们更好地展示数据,还能通过直观的方式探索数据中的模式和异常。本文将对比两款流行的 Python 可视化库:Bok…

第十二章 并行Stream流

目录 一、引言 二、获取并行Stream流的两种方式 三、并行和串行Stream流的效率对比 四、parallelStream线程安全问题 五、parallelStream背后的技术 5.1. Fork/Join框架介绍 5.2. Fork/Join原理-分治法 5.3. Fork/Join原理-工作窃取算法 5.4. Fork/Join案例 一、引言 …

深入解析Kernel32.dll与Msvcrt.dll

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 介绍Kernel32.dll:Windows操作系统的核心Msvcrt.dll:C运行时库的核心 使用举例使用Kernel32.dll的示例:文件操作使用Msvcrt.dll的…

SpringBoot 2.2.10 无法执行Test单元测试

很早之前的项目今天clone现在,想执行一个业务订单的检查,该检查的代码放在test单元测试中,启动也是好好的,当点击对应的方法执行Test的时候就报错 tip:已添加spring-boot-test-starter 所以本身就引入了junit5的库 No…

基于SSM的农家乐管理系统+论文示例参考

1.项目介绍 功能模块:管理员(农家乐管理、美食信息管理、住宿信息管理、活动信息、用户管理、活动报名、论坛等),普通用户(注册登录、活动报名、客房预订、用户评价、收藏管理、模拟支付等)技术选型&#…