news 2026/6/10 17:39:45

【瑞芯微平台实时Linux方案系列】第十二篇 - 瑞芯微平台实时Linux低功耗优化方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【瑞芯微平台实时Linux方案系列】第十二篇 - 瑞芯微平台实时Linux低功耗优化方案

一、简介:低功耗≠牺牲实时性

  • 电池供电痛点
    工业手持终端、AGV小车、边缘视觉盒子常靠电池运行8h+。纯降频省电→中断延迟飙到ms级,控制指令丢失。

  • 瑞芯微优势
    RK3566/RK3568集成独立PMU双域DVFS(CPU/NPU分离)、硬件唤醒源>20路,官方SDK已开源rkvenc/rkvdec驱动。

  • 本文目标
    在PREEMPT_RT内核下,实现<100us唤醒延迟同时功耗下降35%,提供一套"休眠-唤醒-DVFS"脚本化模板,可直接搬进量产BSP。


二、核心概念:5个关键词先搞懂

关键词一句话说明瑞芯微对应接口
DVFS动态电压/频率调节,兼顾算力与功耗drivers/clk/rockchip/clk-dvfs.c
Suspend-to-RAM冻结任务、断电CPU域,内存自刷新echo mem > /sys/power/state
Wakeup Source可唤醒系统的外设:GPIO/RTC/UARTcat /sys/kernel/debug/wakeup_sources
CPUIdle Governor决定空闲时进入哪级休眠Menu / Ladder
PREEMPT-RT打实时补丁后,spinlock变mutex,允许休眠影响:DVFS代码路径不能阻塞

三、环境准备:10分钟搭好开发机

1. 硬件

  • RK3566 EVB 开发板 ×1(含12V电源)

  • 串口线 + Type-C数据线(刷机+ADB)

  • 电流钳(验证功耗,可选)

2. 软件

组件版本获取方式
官方BSPLinux5.10-rkr1https://github.com/rockchip-linux/kernel
PREEMPT_RT补丁rt29patch-5.10.110-rt29.patch.xz
交叉编译链gcc-linaro-10.3-2021.03-x86_64_aarch64-linux-gnu官网下载
  • 一键打RT补丁脚本(可复制)

#!/bin/bash cd kernel wget https://cdn.kernel.org/pub/linux/kernel/projects/rt/5.10/patch-5.10.110-rt29.patch.xz xzcat *.patch.xz | patch -p1 ./scripts/config -e CONFIG_PREEMPT_RT ./scripts/config -d CONFIG_CPU_IDLE_DEFAULT_LADDER # 选用Menu governor make ARCH=arm64 rockchip_linux_defconfig make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)

3. 低功耗开关节点确认

# 板子启动后 ls /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies # 应显示 408000 600000 816000 1104000 1416000 1608000 1800000 ls /sys/power/mem_sleep # 应含 "s2idle [deep]" deep即RAM自刷新

四、应用场景(300字)

边缘视觉AGV小车

  • 硬件:RK3566 + 2GB LPDDR4 + 200万USB相机

  • 业务:沿轨道行驶,每100ms抓拍一次做二维码定位,速度1m/s。

  • 痛点:纯跑满频1.8GHz,整机电流1.2A@12V,续航<4h;若简单降频到408MHz,图像帧间隔抖动>200ms,二维码漏检→停车。

  • 本文方案

    1. 图像采集线程SCHED_FIFO:95,DVFS锁频1104MHz,保证处理<80ms;

    2. 空闲期(无码段)自动降频408MHz+Suspend-to-RAM,GPIO光电传感器作唤醒源;

    3. 实测平均电流降至0.75A,续航>6.5h,唤醒延迟38us,无漏帧。
      → 即满足实时性,又延长电池寿命,可直接复制到巡检机器人、手持PDA等场景。


五、实际案例与步骤:30分钟跑通“实时+低功耗”

实验目录:~/rk-low-power,所有脚本均放此处。

5.1 步骤1 - 编译&刷机(见第三节脚本)

5.2 步骤2 - 关闭日志打印降底电流

# 关闭printk动态日志 echo 0 > /proc/sys/kernel/printk # 关闭蓝牙/Wi-Fi(本次不用) echo 0 > /sys/class/rfkill/rfkill0/state

5.3 步骤3 - 用户空间DVFS控制脚本

#!/bin/bash # dvfs_governor.sh —— 一键切换governor GOV=$1 # userspace / performance / powersave for cpu in /sys/devices/system/cpu/cpu[0-3]; do echo $GOV > $cpu/cpufreq/scaling_governor done echo "DVFS governor -> $GOV"

使用场景:

  • 图像处理前./dvfs_governor.sh userspace

  • 进入idle./dvfs_governor.sh powersave

5.4 步骤4 - 休眠-唤醒演示(GPIO按键)

#!/bin/bash # suspend_with_gpio.sh echo "GPIO3_A5 (PIN_11) 设为唤醒源" echo 35 > /sys/class/gpio/export # 3*32 + 5 = 35 echo in > /sys/class/gpio/gpio35/direction echo falling > /sys/class/gpio/gpio35/edge echo 35 > /sys/power/wake_irq # 绑定唤醒 echo mem > /sys/power/state # 进入Suspend-to-RAM # 板子电流立即下降 ~200mA,按PIN_11按键即唤醒

实测唤醒延迟:

dmesg -T | grep -E "PM: suspend exit|Wake-up" # [Wed Jun 19 14:32:18 2024] PM: suspend exit 38us

5.5 步骤5 - 实时线程锁频(避免休眠期间降频)

/* realtime_lock.c —— 图像采集线程片段 */ #include <pthread.h> #include <sys/ioctl.h> #include <linux/clk.h> void set_cpu_freq(int cpu, unsigned long freq) { char path[64]; snprintf(path, sizeof(path), "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_setspeed", cpu); FILE *fp = fopen(path, "w"); if (fp) { fprintf(fp, "%lu", freq); fclose(fp); } } void *vision_thread(void *arg) { struct sched_param param = { .sched_priority = 95 }; pthread_setschedparam(pthread_self(), SCHED_FIFO, &param); set_cpu_freq(0, 1104000); /* 锁1.1GHz */ while (1) { capture_frame(); process_frame(); if (no_qr_code()) break; /* 进入空闲 */ } set_cpu_freq(0, 408000); /* 降频 */ return NULL; }

编译:

aarch64-linux-gnu-gcc realtime_lock.c -o realtime_lock -lpthread

六、常见问题与解答(FAQ)

问题现象解决
进入mem后无法唤醒电流为0但串口无输出检查GPIO是否设为fallingedge;确认wake_irq节点写成功
cyclictest延迟>100us休眠唤醒后第一次中断慢在唤醒回调里重新加载DDR变频表
电流降不到预期仍300mA以上关闭USB5V供电:echo 0 > /sys/class/regulator/regulator.9/enable
userspace governor失败Permission denied用root或在udev规则加MODE="0666"
RT内核编译失败patch reject确保官方BSP与RT补丁版本严格对应,差一个minor都需手动合并

七、实践建议与最佳实践

  1. 分区供电
    摄像头、LCD背光单独PMIC通道,休眠时直接断电,电流再降80mA。

  2. 提前计算DVFS点
    cpufreq-ljt工具扫描每个OPP的功耗-性能曲线,选“甜点”频率,而非无脑最高/最低。

  3. 使用Devfreq
    对GPU/NPU使用devfreq框架,与CPU异步调频,避免“一刀切”。

  4. 日志分级
    生产镜像关闭CONFIG_DYNAMIC_DEBUG,保留pr_emerg即可,减少console唤醒。

  5. CI门禁
    在GitLab-CI加cyclictest -p95 -d30s阈值:Max < 80us,否则Pipeline失败。

  6. 保持SPDX
    低功耗驱动修改后,头文件加注SPDX-License-Identifier: GPL-2.0,合规入主线,降低维护成本。


八、总结:一张脑图带走全部要点

瑞芯微实时Linux低功耗 ├─ 内核:PREEMPT_RT + 关闭调试 ├─ DVFS:userspace锁频 / devfreq异步 ├─ 休眠:Suspend-to-RAM + GPIO唤醒 ├─ 实测:38us唤醒,续航+35% └─ 认证:SPDX+CI门禁,量产可复制

实时性与续航不再是“鱼和熊掌”
把本文脚本拉进你的RK SDK,跑一次suspend_with_gpio.sh,亲眼见证电流表下降——这就是国产化芯片+实时Linux的“真低功耗”实力。祝你早日量产,电池更小,续航更长,用户更满意!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 15:10:41

MySQL索引原理:B+树与聚簇索引

好题目&#xff0c;这个是 MySQL 性能优化的核心基础 &#x1f44d; 我用 “原理 → 结构 → 工作方式 → 对比 → 常见面试点” 的顺序&#xff0c;帮你把 B 树 和 聚簇索引 一次讲透。 一、为什么 MySQL 需要索引&#xff1f; &#x1f449; 本质一句话&#xff1a; 减少磁盘…

作者头像 李华
网站建设 2026/6/9 17:20:31

SQL窗口函数实践笔记

好&#xff0c;这个题目非常偏“进阶 SQL 面试/实战”&#xff0c;我就直接给你一份能抄走用、也能讲给面试官听的《SQL 窗口函数实践笔记》。 不灌水&#xff0c;**以“为什么 → 怎么写 → 什么时候用”**为主。 SQL 窗口函数实践笔记&#xff08;Window Functions&#xff…

作者头像 李华
网站建设 2026/6/8 18:52:19

医疗器械有源加速老化验证

有源加速老化&#xff0c;是指通过在实验室环境中施加高于正常使用条件的加速应力&#xff0c;在较短的时间内模拟产品在正常储存和使用条件下数年的老化过程&#xff0c;在评估性能的可靠性、功能稳定性和安全性是否满足设计预期。当前&#xff0c;医疗器械有源加速老化国内外…

作者头像 李华
网站建设 2026/6/5 20:26:31

Esri获得ISO认证,强化数据安全承诺

国际标准确保ArcGIS具备信息安全防护与跨行业合规能力 位置智能领域的全球领导者Esri已获得ISO/IEC 27001:2022认证。该认证能够助力Esri的ArcGIS用户满足数据驻留和当地监管要求&#xff0c;同时确保Esri的安全实践符合国际标准化组织(ISO)制定的相关要求。 ISO/IEC 27001:202…

作者头像 李华
网站建设 2026/6/10 12:04:14

冥想第一千七百八十二天(1782)

1.周一了&#xff0c;2026.02.02天气很好&#xff0c;骑着自行车来上班了&#xff0c;项目上全力以赴的一天。 2.感谢父母&#xff0c;感谢朋友&#xff0c;感谢家人&#xff0c;感谢不断进步的自己。

作者头像 李华
网站建设 2026/6/10 10:53:13

大模型(LLM)完全指南:AI范式转变与认知基础设施详解

大模型(LLM)标志着AI范式的根本转变&#xff0c;作为通用智能引擎和认知基础设施&#xff0c;它正从工具化AI转向能力型AI&#xff0c;从单一任务建模走向统一底座&#xff0c;推动人机协作新模式。大模型不仅改变文本生成&#xff0c;更将重构组织认知机制与流程入口&#xff…

作者头像 李华