RV1126B NPU 温度限频验证
本验证基于 thermal_test_report.md 的客户工况:pose_terminal_demo、IMX415 视频流、NPU 原先锁定 700 MHz、每 10 秒采样一次。
验证目标
确认已烧写的新 DTB 包含 rockchip,temp-freq-table,并确认温度超过阈值后,NPU 实际频率不高于表中限制。
本次临时表为:
rockchip,temp-freq-table = <
50000 600000
60000 510000
70000 396000
>;
| 温度严格超过 | NPU 最高频率 |
|---|---|
| 50°C | 600 MHz |
| 60°C | 510 MHz |
| 70°C | 396 MHz |
报告中的基线是 NPU+视频稳态约 75.2°C、NPU 700 MHz,因此这组临时阈值能覆盖实际发热场景。
测试脚本
本地脚本:
/home/user/workspace/docs/private-docs/Engineering/Linux内核/RV1126B/verify_npu_temp_limit.sh
脚本在板端完成以下检查:
- 查找
cpu-thermal和 NPU devfreq 节点。 - 从运行中的 DTB 读取并解析
npu-opp-table/rockchip,temp-freq-table。 - 每 10 秒记录温度、NPU
cur_freq、RKNPU 负载和应有频率上限。 - 温度超过阈值且频率不高于上限时标记
PASS,否则标记FAIL。
temp-freq-table 的频率单位是 kHz;NPU cur_freq 通常为 Hz,脚本会自动换算为 kHz 再比较。
执行
将脚本推送到已烧写的板卡。把 <板卡IP> 替换为目标板的 ADB 地址:
hadb -s <板卡IP>:5555 push \
/home/user/workspace/docs/private-docs/Engineering/Linux内核/RV1126B/verify_npu_temp_limit.sh \
/tmp/verify_npu_temp_limit.sh
终端一启动采样脚本:
hadb -s <板卡IP>:5555 shell \
'sh /tmp/verify_npu_temp_limit.sh -d 600 -i 10'
终端二启动与报告相同的客户场景:
hadb -s <板卡IP>:5555 shell pose_terminal_demo
脚本会在板端生成:
/tmp/npu-temp-freq.log
取回日志:
hadb -s <板卡IP>:5555 pull /tmp/npu-temp-freq.log .
结果判定
日志每行末尾为结果:
| 结果 | 含义 |
|---|---|
BELOW_THRESHOLD | 温度尚未超过第一档,不能判断限频功能。 |
PASS | 温度已超过阈值,NPU 频率未超过对应上限。 |
FAIL | 温度已超过阈值,但 NPU 频率仍高于对应上限。 |
脚本结尾的 SUMMARY 中 fail=0 且 active_samples 大于 0,即为通过。
不要以报告中的 cool1 是否变化判断本次结果。cool1 属于原 thermal cooling-map 通道;本次验证的是 temp-freq-table 经 System Monitor 对 NPU Devfreq 的直接限制。
失败时检查
若脚本提示运行中 DTB 不存在 temp-freq-table,说明新 DTB 没有随内核镜像生效。
若出现 FAIL,保留 /tmp/npu-temp-freq.log,并读取:
hadb -s <板卡IP>:5555 shell \
"dmesg | grep -Ei 'system.monitor|rknpu|devfreq'"
同时确认压测期间 /sys/kernel/debug/rknpu/load 有非零负载;空载时频率较低不能证明温度限频生效。