03-Arm SiP Services

本文介绍了Arm SiP服务,包括性能测量框架、执行状态切换服务及DebugFS接口。执行状态切换服务允许从AArch64到AArch32或反之进行切换,而性能测量框架则用于捕获不同路径上的时间戳。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键词: TF-A,TF-M,ATF,TrustedFirmware,trustzone,TEE,optee,trusty,tlk,lk,armv8,armv9,arm,secureboot,BL31,BL32,BL1,BL2,hypervisor,终端安全,secureboot,security,virtulization

快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈


👉[专栏目录]-ATF/FF-A/specification学习👈

请添加图片描述

本文列举并描述了 Arm SiP(Silicon Provider)服务。

SiP 服务是由芯片实施者或平台提供商提供的非标准、特定于平台的服务。 它们通过从低于 EL3 的异常级别执行的 SMC(“SMC 调用”)指令访问。 SMC 要求 SiP 服务:

遵从SMC Calling Convention规范,使用属于 SiP 范围的 SMC 功能 ID,对于 64 位调用,它们是 0xc2000000 - 0xc200ffff,对于 32 位调用,它们是 0x82000000 - 0x8200ffff。

Arm SiP 提供以下服务:

  • Performance Measurement Framework (PMF)
  • Execution State Switching service
  • DebugFS interface

Arm SiP 服务定义位于 arm_sip_svc.h 头文件中。

3.1. Performance Measurement Framework (PMF)

性能测量框架(Performance Measurement Framework)允许调用者检索在 TF-A 执行中在不同路径上捕获的时间戳。

3.2. Execution State Switching service

执行状态切换服务为非安全的较低异常级别(EL2 或 NS EL1,如果未实现 EL2)请求切换其执行状态(又名寄存器宽度),从 AArch64 到 AArch32,或从 AArch32 到 AArch64,用于调用 CPU。 此服务仅在为 AArch64 构建 Trusted Firmware-A (TF-A) 时可用(即当构建选项 ARCH 设置为 aarch64 时)。

3.2.1. ARM_SIP_SVC_EXE_STATE_SWITCH
Arguments:
    uint32_t Function ID
    uint32_t PC hi
    uint32_t PC lo
    uint32_t Cookie hi
    uint32_t Cookie lo

Return:
    uint32_t

函数 ID 参数必须为 0x82000020。它唯一标识所请求的执行状态切换服务。

参数 PC hi 和 PC lo 分别定义了执行状态切换后应该开始执行的入口点(物理地址)的高位字和低位字。从 AArch64 调用时,PC hi 必须为 0。

当执行状态切换后从提供的入口点开始执行时,参数 Cookie hi 和 Cookie lo 分别被传递到 CPU 寄存器 0 和 1。从 AArch64 调用时,Cookie hi 必须为 0。

此调用只能在主 CPU 上进行,然后才通过 CPU_ON PSCI 调用启动任何辅助 CPU。否则,调用将始终失败。

切换执行状态的效果就像上电后第一次进入异常级别一样。这意味着具有架构定义的复位值的 CPU 寄存器将采用该值。在进行调用之前,不应期望其他寄存器保持它们的值。但是,CPU 字节序保留了先前的执行状态。请注意,这仅切换调用 CPU 的执行状态。这不能替代 PSCI SYSTEM_RESET。

该服务可能会返回以下错误代码:

STATE_SW_E_PARAM:如果任何参数被认为对特定请求无效。

STATE_SW_E_DENIED:如果调用不成功,或者当为 AArch32 构建 TF-A 时。

如果调用成功,调用者将不会观察到 SMC 返回。相反,执行从提供的入口点开始,CPU 寄存器 0 和 1 分别填充有提供的 Cookie hi 和 Cookie lo 值。

3.3. DebugFS interface

通过 SMC SiP 服务访问可选的 DebugFS 接口。 有关详细信息,请参阅组件文档。

字符串参数通过使用特定联合的共享缓冲区传递:

union debugfs_parms {
    struct {
        char fname[MAX_PATH_LEN];
    } open;

    struct mount {
        char srv[MAX_PATH_LEN];
        char where[MAX_PATH_LEN];
        char spec[MAX_PATH_LEN];
    } mount;

    struct {
        char path[MAX_PATH_LEN];
        dir_t dir;
    } stat;

    struct {
        char oldpath[MAX_PATH_LEN];
        char newpath[MAX_PATH_LEN];
    } bind;
};

dir_t 结构的格式如下:

typedef struct {
    char            name[NAMELEN];
    long            length;
    unsigned char   mode;
    unsigned char   index;
    unsigned char   dev;
    qid_t           qid;
} dir_t;

安装jmpro16报错:------------------------------------- Translated Report (Full Report Below) ------------------------------------- Incident Identifier: B5BC2CD0-BBE4-4FC3-8AE7-C31172E5F807 CrashReporter Key: BEB86B0A-A37E-7DA0-4384-8CDA4FCBA770 Hardware Model: MacBookPro17,1 Process: Installer [3748] Path: /System/Library/CoreServices/Installer.app/Contents/MacOS/Installer Identifier: com.apple.installer Version: 6.2.0 (1131) Code Type: X86-64 (Native) Role: Foreground Parent Process: launchd [1] Coalition: com.apple.installer [4237] Date/Time: 2025-03-19 16:59:24.4592 +0800 Launch Time: 2025-03-19 16:59:23.9393 +0800 OS Version: macOS 13.2.1 (22D68) Release Type: User Report Version: 104 Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000020 Exception Codes: 0x0000000000000001, 0x0000000000000020 VM Region Info: 0x20 is not in any region. Bytes before following region: 140722817843168 REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL UNUSED SPACE AT START ---> mapped file 7ffc9591c000-7ffca03e8000 [170.8M] r-x/r-x SM=COW ...t_id=a73e7c65 Termination Reason: SIGNAL 11 Segmentation fault: 11 Terminating Process: exc handler [3748] Triggered by Thread: 0 Thread 0 Crashed: 0 runtime 0x7ff7ffcfe02c 0x7ff7ffcfa000 + 16428 1 runtime 0x7ff7ffd17878 0x7ff7ffcfa000 + 120952 2 runtime 0x7ff7ffd17968 0x7ff7ffcfa000 + 121192 3 runtime 0x7ff7ffd17914 0x7ff7ffcfa000 + 121108 4 runtime 0x7ff7ffd17850 0x7ff7ffcfa000 + 120912 5 runtime 0x7ff7ffd179b0 0x7ff7ffcfa000 + 121264 6 runtime 0x7ff7ffd0d160 0x7ff7ffcfa000 + 78176 7 runt
03-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arm精选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值