You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hmz007 fa918e3b1d
Rockchip Anroid14_SDK 20250827-rkr8 (4a2b26f1)
7 months ago
..
configs Rockchip Anroid14_SDK 20250827-rkr8 (4a2b26f1) 7 months ago
default Rockchip Anroid14_SDK 20250827-rkr8 (4a2b26f1) 7 months ago
libmagicboost_manager Rockchip Anroid14_SDK 20250827-rkr8 (4a2b26f1) 7 months ago
power_ext Rockchip Anroid14_SDK 20250827-rkr8 (4a2b26f1) 7 months ago
vts Rockchip Anroid14_SDK 20250827-rkr8 (4a2b26f1) 7 months ago
README.md Rockchip Anroid14_SDK 20250827-rkr8 (4a2b26f1) 7 months ago

README.md

Rockchip 电源扩展接口

该仓库包含 Rockchip 电源扩展接口的实现,用于 Android通过 Android 硬件抽象层 (HAL) 提供增强的电源管理功能。

概述

电源扩展接口提供了标准 Android 电源 HAL 之外的额外电源管理功能。它包括:

  1. Magic Boost - 扩展的电源接口,可以使特定任务申请不同场景的加速
  2. 电源提示会话 - 针对不同应用场景的增强型电源提示处理
  3. 加速会话 - 用于应用程序性能优化的专用加速功能

目录结构

  • configs/ - 配置文件,包括一些默认的 profile能够通过配置选择加速参数。
  • default/ - 扩展部分接口的默认实现,包含 BoostSession 和 MagicBoost 类,这部分默认的 AOSP 不会调用到,给 RK 上层增加的服务调用。
  • libmagicboost_manager/ - 管理魔法加速功能的核心库
  • power_ext/ - AOSP Power aidl 的默认实现,会将 MagicBoost 扩展作为 power aidl 的插件注册到系统。通过 libmagicboost_manager 去管理控制所有硬件节点。
  • vts/ - VTS供应商测试套件测试用于验证实现

核心组件

Magic Boost

提供了一种机制,可以为特定任务临时提升设备性能。它通过以下方式实现:

  • MagicBoost.h/cpp - 默认服务中的核心实现
  • MagicBoostManager.h/cpp - 用于管理加速状态和参数的库
  • magic_boost.json - 定义加速参数的配置文件

电源扩展

Power AIDL 的主要实现包括:

  • Power.h/cpp - 主电源 HAL 扩展实现
  • PowerHintSession.h/cpp - 增强的电源提示会话处理

加速会话

专用的加速功能在以下文件中实现:

  • BoostSession.h/cpp - 加速会话管理

构建

该模块作为 Android 构建系统的一部分,使用每个目录中的 Android.bp 文件进行构建。

测试

vts/ 目录中有 VTS 测试,可用于验证电源扩展接口的正确实现。

调试

可以通过 adb shell dumpsys 命令与 Power HAL 进行交互,以进行调试和状态检查。

基本用法

执行以下命令可以查看 MagicBoost 管理器的当前状态包括已发现的硬件集群CPU, GPU 等)及其当前状态(频率,调节器等)。

adb shell dumpsys android.hardware.power.IPower/default

调试选项

dumpsys 命令支持多种参数,用于控制日志记录、功能开关和信息展示:

  • debug_on: 启用详细的调试日志。日志将输出到 logcat 中tag 为 MagicBoostAIDL
  • debug_off: 关闭调试日志。
  • enable: 启用 MagicBoost 管理器。
  • disable: 禁用 MagicBoost 管理器并释放所有性能锁,将硬件恢复到默认状态。
  • trace_on: 开始跟踪长时持有indefinite的 profile 锁。
  • trace_off: 停止并清除跟踪数据。
  • profiles: 在输出中包含所有可用的 profile 列表。
  • trace: 在输出中包含当前被跟踪的 profile 锁的详细信息。
  • load <file>: 加载一个自定义的配置文件。

示例:

# 打开调试日志并查看可用的 profile
adb shell dumpsys android.hardware.power.IPower/default debug_on profiles

动态加载配置文件 (load)

这是一个非常强大的调试功能,允许您在设备运行时动态加载一个新的配置文件,而无需重新编译或重启设备。这对于快速测试和微调 profile 非常有用。

使用方法:

  1. 将您修改后的 magic_boost.json (或任何其他自定义配置文件) 推送到设备上,例如 /data/local/tmp/ 目录:

    adb push configs/magic_boost_rk3588.json /data/local/tmp/test_config.json
    
  2. 使用 load 命令让 Power HAL 加载这个文件:

    adb shell dumpsys android.hardware.power.IPower/default load /data/local/tmp/test_config.json
    

加载后,文件中定义的 profile 将会覆盖或添加到当前运行的配置中。您可以通过再次执行 dumpsys 并带上 profiles 参数来验证更改是否生效。

配置

configs/ 目录中的 magic_boost.json 文件定义了魔法加速功能的参数。可以根据设备特定要求自定义此文件。该文件主要包含两部分:hardware_infoprofiles

hardware_info

hardware_info 数组定义了可控的硬件单元及其对应的 sysfs 节点信息。每个硬件单元是一个 JSON 对象,包含以下字段:

  • name: 硬件的唯一标识符 (例如: "cpu", "gpu")。
  • description: 硬件的描述。
  • base_path: 该硬件在 sysfs 中的基础路径。
  • parser: 用于解析该硬件 sysfs 目录结构的解析器类型。例如,policy 用于 CPU因为它有 policyX 子目录。
  • info_min_path/info_max_path: 读取硬件支持的最小/最大值(例如频率)的节点文件名。
  • min_path/max_path: 控制硬件最小/最大值的节点文件名。
  • governor_path: 控制硬件调节器 (governor) 的节点文件名。
  • default_gov: 默认的调节器。

修改示例: 如果您的设备的 GPU sysfs 路径不同,您可以修改 gpu 条目的 base_path

{
    "name": "gpu",
    "description": "GPU",
    "base_path": "/sys/class/devfreq/new_gpu_path",
    ...
}

profiles

profiles 数组定义了不同的性能模式。有两种类型的 profile

  1. 基础 Profile (Base Profiles): 直接控制硬件节点。

    • name: Profile 的唯一名称 (例如: cpu_base_highest)。
    • nodes: 一个数组,定义了要操作的硬件节点。
      • alias: 对应 hardware_info 中的一个 name,指定要控制哪个硬件。
      • index: 指定要控制的硬件索引。all 表示所有。对于 CPU可以是 "0", "4" 等。
      • path_alias: 一个数组,指定要写入的节点,对应 hardware_info 中的路径别名 (例如: max_path, min_path)。
      • value: 要写入的值。可以是具体数值,也可以是 maxmin,表示使用硬件信息中读取到的最大/最小值。

    示例: cpu_base_highest profile 将所有 CPU 核心的最小和最大频率都设置为其支持的最高频率。

    {
        "name": "cpu_base_highest",
        "description": "Basic CPU adjuster, all cores highest frequency",
        "nodes": [
            {
                "name": "cpu_freq_all_max",
                "alias": "cpu",
                "index": "all",
                "path_alias": ["max_path", "min_path"],
                "value": "max"
            }
        ]
    }
    
  2. 复合 Profile (Composite Profiles): 组合多个已有的 Profile。

    • name: Profile 的名称 (例如: LAUNCH)。
    • alias: 一个包含其他 Profile 名称的数组。

    示例: LAUNCH profile 是一个复合 profile它激活了多个基础 profile以在应用启动时提升 CPU, GPU, UFS, VOP 和 DDR 的性能。

    {
        "name": "LAUNCH",
        "description": "AOSP App launch profile",
        "alias": [
            "cpu_base_highest",
            "gpu_base_highest",
            "ufs_base_highest",
            "vop_base_highest",
            "ddr_base_highest"
        ]
    }
    

如何自定义 Profile:

您可以添加新的基础 profile 来微调某个硬件,或者创建新的复合 profile 来应对特定的应用场景。例如,要创建一个新的游戏模式,可以组合不同的基础 profile甚至可以为该模式创建一个新的基础 profile专门设置某个硬件参数。

高级配置:覆盖和特定平台配置

系统支持通过创建特定的 JSON 配置文件来覆盖默认的 magic_boost.json 中的 profiles 或为特定硬件平台/产品添加新的 profiles

加载顺序与覆盖规则

系统启动时,会按以下顺序加载配置文件:

  1. /vendor/etc/power/magic_boost.json (或 APEX 路径下的) - 这是基础配置文件。
  2. 基于平台 (ro.board.platform) 的配置文件,例如: .../magic_boost_rk3588.json
  3. 基于产品型号 (ro.product.odm.model) 的配置文件,例如: .../magic_boost_MyDevice.json

加载是增量式的。如果后续加载的配置文件中包含与已加载的 profile 同名的 profile,则新的 profile覆盖旧的。如果 profile 名称是新的,则会被添加进去。hardware_info 部分只在 magic_boost.json 中解析,后续的配置文件应只包含 profiles 数组。

示例:为 RK3588 平台自定义 Profile

假设我们想为 RK3588 平台修改 EXPENSIVE_RENDERING 这个 profile 的行为。

  1. 创建新的配置文件: 在 configs/ 目录下创建一个名为 magic_boost_rk3588.json 的新文件。

  2. 定义覆盖 Profile: 在该文件中,我们只定义需要覆盖或添加的 profiles。例如,我们让 EXPENSIVE_RENDERING 只提升 DDR 频率:

    {
        "profiles": [
            {
                "name": "EXPENSIVE_RENDERING",
                "description": "RK3588 Expensive rendering profile",
                "alias": [
                    "ddr_base_highest"
                ]
            }
        ]
    }
    

    当系统在一个 ro.board.platform 属性为 "rk3588" 的设备上运行时,这个新的 EXPENSIVE_RENDERING 定义会覆盖 magic_boost.json 中的默认定义。

  3. 更新构建文件: 最后,需要将这个新的配置文件添加到 configs/Android.bp 中,以便编译系统能将它打包到系统中。

    apex_defaults {
        name: "rockchip-power_ext-config-default",
        prebuilts: [
            "magic_boost.json",
            "magic_boost_rk3588.json", // 添加新文件
        ],
    }
    
    prebuilt_etc {
        name: "magic_boost_rk3588.json", // 为新文件添加 prebuilt_etc
        vendor: true,
        src: "magic_boost_rk3588.json",
        filename_from_src: true,
    }
    

通过这种方式,您可以为不同的硬件平台或产品型号维护一套独立的、可覆盖的性能配置,而无需修改基础的 magic_boost.json 文件。

实现细节

该实现遵循 Android 的 AIDLAndroid 接口定义语言)来实现电源扩展接口,提供了一种标准化的方法,使 Android 框架可以访问 Rockchip 特定的电源管理功能。