当前位置: 首页 > news >正文

【DeepSeek】ARM PSCI (Power State Coordination Interface) 服务介绍

ARM PSCI (Power State Coordination Interface) 服务介绍

1. 概述

PSCI (Power State Coordination Interface)是 ARM 定义的一种标准接口,用于操作系统(OS)与底层固件之间进行电源管理相关的通信。

在 ARMv8-A 架构(AArch64)引入之前,Linux 内核等操作系统需要直接操作 SoC 厂商特定的硬件寄存器来管理 CPU 的电源状态(如启动、关闭、休眠)。这导致内核代码中充斥着大量的板级私有代码,难以维护。

PSCI 的出现旨在解决这一问题,它将电源管理的具体实现下沉到更底层的固件(如 ARM Trusted Firmware, ATF)中,内核只需通过统一的接口(SMCC/HVC)调用即可。

2. 核心目标

PSCI 的主要设计目标包括:

  • 解耦:将操作系统的电源管理逻辑与底层硬件实现分离。OS 内核不再需要关心具体 SoC 的电源控制寄存器细节。
  • 标准化:提供统一的标准 API,使得同一份内核镜像可以在不同厂商的 ARM 芯片上运行,只要固件实现了 PSCI 标准。
  • 安全性:电源管理操作通常涉及关键系统资源,PSCI 调用通常发生在 EL3(最高特权级)或 EL2(Hypervisor 模式),确保系统状态的安全性。

3. 架构与调用机制

PSCI 通常作为ARM SMC (Secure Monitor Call)调用规范的一部分实现。

调用路径

  1. OS 内核 (EL0/EL1):发起电源管理请求(例如:关闭 CPU)。
  2. SMC/HVC 指令:内核执行smchvc指令,CPU 陷入更高特权级。
  3. 运行时固件 (EL3/EL2)
    • EL3 (Secure Monitor):如果是裸机或标准安全固件场景,请求被路由到 ARM Trusted Firmware (ATF)。ATF 中的 PSCI 模块处理该请求,操作硬件。
    • EL2 (Hypervisor):在虚拟化场景下,Hypervisor 可以拦截 PSCI 调用并进行虚拟化处理。
  4. 硬件操作:固件操作具体的电源控制逻辑(如断电、复位、状态保存)。

4. 主要功能接口

PSCI 定义了一系列功能 ID (Function IDs),主要涵盖以下几类操作:

4.1 CPU 电源管理

这是 PSCI 最核心的功能,用于多核启动和热插拔:

  • PSCI_VERSION:查询固件支持的 PSCI 版本(如 0.1, 0.2, 1.0, 1.1)。
  • CPU_ON启动一个处于关闭状态的 CPU 核心。这是 SMP(对称多处理)系统启动从核的关键接口。内核传递目标 CPU 的 MPIDR 和启动地址。
  • CPU_OFF:关闭当前 CPU 核心。通常用于 CPU 热插拔或系统关机流程。
  • CPU_SUSPEND:将当前 CPU 挂起(进入低功耗状态,如 Retention 或 Standby)。支持“浅睡眠”到“深睡眠”不同级别的状态。
  • CPU_RESET:复位指定的 CPU 核心。

4.2 系统级电源管理

  • SYSTEM_OFF:关闭整个 SoC 或系统。
  • SYSTEM_RESET:复位整个系统。
  • SYSTEM_SUSPEND:将整个系统挂起到内存,类似于 ACPI 的 S3 状态。

4.3 辅助功能

  • AFFINITY_INFO:查询指定 CPU 或集群的电源状态(是 ON, OFF 还是 ON_PENDING)。
  • PSCI_FEATURES:查询特定 PSCI 功能是否支持及其属性(PSCI 1.0 引入)。
  • SET_SUSPEND_MODE:设置挂起模式(仅限 PSCI 1.0+)。

5. PSCI 版本演进

  • PSCI v0.1:早期版本,主要解决 SMP 启动问题,功能 ID 定义不够规范。
  • PSCI v0.2:引入了标准的psci_smc_handler,统一了功能 ID 分配,增加了SYSTEM_SUSPEND等。
  • PSCI v1.0:增加了PSCI_FEATURES查询、MEM_PROTECT(内存保护)等特性,完善了状态 ID 的定义。
  • PSCI v1.1:增加了SYSTEM_RESET2(支持不同类型的系统复位)等扩展功能。

6. 在 Linux 内核中的体现

在 Linux 内核设备树中,我们经常看到类似以下的节点,这表明内核将通过 PSCI 进行电源管理:

psci { compatible = "arm,psci-0.2"; /* 或 "arm,psci-1.0" */ method = "smc"; /* 调用方式为 smc,虚拟化环境下可能为 hvc */ cpu_suspend = <0x84000001>; cpu_on = <0x84000003>; cpu_off = <0x84000002>; };

内核启动时,psci_dt_init会解析该节点,注册smp_operations(如psci_smp_ops),从而将cpu_up等内核操作映射到 PSCI 的CPU_ON调用。

7. 总结

ARM PSCI 是现代 ARM SoC 电源管理的基石。它通过定义标准的 SMC 接口,成功地将操作系统的电源管理策略与底层硬件的具体实现分离开来。这不仅简化了 Linux 内核的维护工作,也促进了 ARM 生态中固件(如 ATF)与操作系统之间的协同标准化。

http://www.jsqmd.com/news/686852/

相关文章:

  • 如何用开源工具实现抖音内容的高效批量下载与智能管理
  • 如何快速掌握AMD Ryzen调试工具:免费开源SMUDebugTool完整指南
  • BLE PAST:手机如何成为穿戴设备的“同步中继站”?
  • 2026届毕业生推荐的五大降重复率网站推荐榜单
  • Phi-3.5-Mini-Instruct实战教程:对接企业微信/钉钉机器人实现内部AI服务
  • 别再只盯着UNO了!Arduino NANO的8个隐藏用法,让你的面包板项目更小巧高效
  • StreamCap:轻松录制40+直播平台,打造个人专属直播库
  • 2026圆盘式气流粉碎机厂家排行榜,选购要点解读 - 工业品牌热点
  • 88.乐理基础-记号篇-反复记号(二)D.C.、D.S.、Fine、Coda:从标记到实战演奏的完整导航
  • AI-Agent2.0驱动的科研全链路:一站式掌握LLM与Notebooklm应用、数据分析、自动化编程、文献管理到论文写作的核心技能、手把手搭建本地LLM与Agent体验多模型“圆桌会议”的头脑风暴
  • Rust eGUI布局踩坑实录:Panel的show_inside和show区别在哪?顺序错了会怎样?
  • IPXWrapper终极指南:3个步骤让经典游戏在现代Windows重获联机能力
  • 拯救者笔记本性能优化实战:怎样用开源工具替代臃肿的官方软件
  • CentOS 安装 Nginx 并配置开机自启(简洁版)
  • 【读书笔记】《围城》
  • STM32用GPIO模拟I2C驱动AT24C16,实测代码避坑与页写优化
  • 别再手动对时了!用Chrony在Ubuntu 22.04上5分钟搞定局域网服务器时间同步
  • 剖析2026年常州施工资质新办专业企业,皓邦集团靠谱好用 - 工业推荐榜
  • 别再乱拖了!Unity ScrollRect 精准控制滚动行为的3种方法对比(CanvasGroup vs 重写 vs EventTrigger)
  • 2026年南京施工资质新办企业推荐,皓邦集团口碑出众 - myqiye
  • 千问3.5-2B开源大模型实战:支持本地化部署,数据不出内网的图文理解方案
  • 掌握八大网盘直链解析:LinkSwift下载助手全面解析
  • 告别重装!ThinkBook 16+ 双系统(Ubuntu 20.04/Win11)后的10个必做优化设置
  • 被职场‘优化’后我靠Y疗维修技术这门手艺重新站起来
  • 告别云端:在树莓派4B上搭建你的私有AI聊天机器人(基于llama.cpp)
  • 51单片机+PCF8591实战:手把手教你用C语言生成四种基础波形(附Proteus仿真文件)
  • cubemx在工程中添加freertos后报错原因及解决办法
  • GEO源码搭建运行报错全解析+2026完整部署上线方案(Docker+宝塔双方案,附避坑指南)
  • OpenCV - 实现鼠标在界面上绘制一些基本图形
  • 3步精通中兴光猫配置解密:高效网络设备管理解决方案