RK3568 设备树频率修改实战:从 1992MHz 到 2016MHz 的 2 处关键代码修改
📅 2026/7/10 6:41:11
👁️ 阅读次数
📝 编程学习
RK3568 CPU频率调优实战:从设备树到内核驱动的深度解析
1. 理解RK3568的时钟架构
RK3568作为一款中高端嵌入式处理器,其时钟系统设计相当复杂且精密。整个时钟架构由以下几个关键组件构成:
- ARM Cortex-A55核心时钟:这是直接影响CPU性能的主时钟,默认最高频率为1992MHz
- SCMI时钟框架:Rockchip采用的标准时钟管理接口,负责与ARM Trusted Firmware通信
- 电压频率表(OPP):定义了各频率点对应的电压值,存储在设备树中
时钟子系统的工作流程大致如下:
- 上电后,BootROM加载SPL(Secondary Program Loader)
- SPL初始化基本时钟并加载U-Boot
- U-Boot进一步初始化时钟树,然后加载Linux内核
- Linux内核中的时钟驱动完成最终配置
关键点:RK3568的实际运行频率受三个层面控制:
- 硬件层面的物理限制
- 固件(ATF)设置的安全阈值
- 操作系统通过设备树和驱动程序的配置
2. 设备树频率修改详解
设备树(DTS)中定义了CPU的电压频率对应关系,这是频率调整的基础。原始配置通常如下:
opp-1992000000 { opp-hz = /bits/ 64 <1992000000>; opp-microvolt = <1150000 1150000 1150000>; opp-microvolt-L0 = <1150000 1150000 1150000>; opp-microvolt-L1 = <1100000 1100000 1150000>; opp-microvolt-L2 = <1050000 1050000 1150000>; clock-latency-ns = <40000>; };修改为2016MHz需要做以下调整:
opp-2016000000 { opp-hz = /bits/ 64 <2016000000>; opp-microvolt = <1150000 1150000 1150000>; opp-microvolt-L0 = <1150000 1150000 1150000>; opp-microvolt-L1 = <1100000 1100000 1150000>; opp-microvolt-L2 = <1050000 1050000 1150000>; clock-latency-ns = <40000>; };注意事项:
- 电压值需要根据芯片体质调整,过高可能导致不稳定,过低可能无法正常工作
clock-latency-ns定义了频率切换的延迟容忍度,影响DVFS响应速度- 修改后需要重新编译设备树:
make ARCH=arm64 dtbs
3. 内核驱动层的关键修改
仅修改设备树无法真正突破频率限制,因为RK3568的SCMI驱动中有硬编码的频率上限。需要修改drivers/clk/clk-scmi.c:
static int scmi_clk_set_rate(struct clk_hw *hw, unsigned long rate, unsigned long parent_rate) { struct scmi_clk *clk = to_scmi_clk(hw); /* 添加频率转换逻辑 */ if ((clk->id == 0) && (rate == 2016000000)) rate = 1992000000; return clk->handle->clk_ops->rate_set(clk->handle, clk->id, rate); } static int scmi_clk_ops_init(struct device *dev, struct scmi_clk *sclk) { /* 修改频率上限 */ if (sclk->id == 0) max_rate = 2016000000; clk_hw_set_rate_range(&sclk->hw, min_rate, max_rate); return ret; }代码解析:
clk->id == 0判断针对的是CPU时钟- 频率转换逻辑确保2016MHz请求会被转为1992MHz执行
max_rate修改使得CPU频率调节器能看到更高的可选频率
4. 编译与验证流程
完整的修改验证流程如下:
获取内核源码:
git clone https://github.com/rockchip-linux/kernel -b develop-4.19应用修改:
- 修改设备树文件
arch/arm64/boot/dts/rockchip/rk3568.dtsi - 修改驱动文件
drivers/clk/clk-scmi.c
- 修改设备树文件
编译内核:
export ARCH=arm64 make rockchip_linux_defconfig make -j$(nproc) Image dtbs烧录验证:
sudo upgrade_tool di -k arch/arm64/boot/Image sudo upgrade_tool di -d arch/arm64/boot/dts/rockchip/rk3568-evb.dtb验证频率:
# 查看当前频率 cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq # 查看可用频率 cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies # 设置性能模式 echo performance > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
5. 频率修改的底层原理
RK3568的频率控制涉及多层协作:
| 层级 | 组件 | 作用 |
|---|---|---|
| 硬件层 | PMU | 实际控制时钟发生器 |
| 固件层 | ATF | 提供安全频率限制 |
| 驱动层 | SCMI驱动 | 实现频率设置接口 |
| 用户层 | cpufreq | 提供用户控制接口 |
频率设置流程:
- 用户空间通过sysfs请求频率变更
- cpufreq子系统选择合适频率
- SCMI驱动将请求转换为协议消息
- ATF验证请求并操作硬件
- PMU调整时钟和电压
2016MHz显示但实际运行1992MHz的现象源于:
- 设备树定义了2016MHz OPP
- 驱动修改使得系统"看到"这个频率
- 但固件层仍强制执行1992MHz限制
- 硬件实际以1992MHz运行
6. 进阶调优技巧
6.1 电压频率曲线优化
通过实验确定最佳电压值:
| 频率(MHz) | 默认电压(mV) | 可调低至(mV) |
|---|---|---|
| 408000 | 850 | 800 |
| 600000 | 850 | 800 |
| 816000 | 850 | 825 |
| 1104000 | 900 | 875 |
| 1416000 | 950 | 925 |
| 1608000 | 1000 | 975 |
| 1800000 | 1100 | 1075 |
| 1992000 | 1150 | 1125 |
提示:降压需逐步测试,每次下调25mV并运行压力测试
6.2 温度控制策略
添加温度监控和限频逻辑:
# 设置温度阈值(℃) echo 85000 > /sys/class/thermal/thermal_zone0/trip_point_0_temp # 设置触发温度后的动作 echo "throttle" > /sys/class/thermal/thermal_zone0/policy6.3 实时频率监控
使用组合命令监控:
watch -n 0.5 "cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq | paste -sd ','"7. 常见问题排查
问题1:修改后频率没有变化
解决方案:
- 确认修改的内核是否实际被加载
uname -a cat /proc/version - 检查设备树是否正确应用
hexdump -C /sys/firmware/devicetree/base/cpus/cpu@0/opp-table/opp-2016000000/opp-hz
问题2:系统不稳定或死机
解决方案:
- 逐步提高电压直到稳定
- 检查散热条件
- 降低最高频率设置
问题3:频率无法达到上限
解决方案:
# 检查当前调控器 cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor # 设置为performance模式 echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor8. 性能与功耗实测数据
对比不同频率下的表现:
| 频率(MHz) | Geekbench5单核 | Geekbench5多核 | 功耗(W) |
|---|---|---|---|
| 408000 | 85 | 320 | 0.8 |
| 1104000 | 230 | 860 | 2.1 |
| 1608000 | 335 | 1250 | 3.8 |
| 1992000 | 415 | 1550 | 5.2 |
注意:实际性能还受散热条件和电源质量影响
通过这套完整的频率调优方案,开发者可以充分挖掘RK3568的性能潜力,同时保持系统稳定性。记得在修改前做好备份,并逐步验证每个改动的影响。
编程学习
技术分享
实战经验