msm8998 (Snapdragon 835) 降压 undervolt
理论
如何在不编译内核的情况下,修改现有boot的dts呢
boot由几部分组成
- kernel
- dtb
- …
利用device-tree-compiler对dtb反编译即可,但Android的dtb,包含不同dtb block,dtc只会反编译在头部的dtb,如何一次性全部反编译?
本来想用hexdump或者xxd康康16进制然后dd分割,但实在太复杂,shell不是很会写,感觉掌控不了它,因此自己用c写了个小东西,上代码,具体怎么分割的,可以康康dtb文件解析,head totalsize等等。
1 | #include <getopt.h> |
我的目标是反编译dtb,最好能在Android直接运行。
因此上shell,本来是在x86上写调试,等最后一波在Android上再运行,无奈安卓上bash和ubuntu x86差的也太多。况且magiskboot x86 prebuilt不好用。
整个project源码见: msm8998_offset_voltage
此shell的步骤:
- use dd command to get boot.img
- use magiskboot to unpack boot.img into kernel+kernel_dtb
- use dtp to split kernel_dtb into sub kernel_dtb-*
- find the adapted dtb according to qcom, board-id and qcom, msm-id
- use dtc to decompile the selected dtb into .dts
- undervolt by change qcom,cpr-open-loop-voltage-fuse-adjustment qcom,cpr-closed-loop-voltage-fuse-adjustment qcom,cpr-closed-loop-voltage-adjustment in .dts
- compile dts and pack boot.img
结果
1 | [ 0.440216] [ 0.440200]@4 add_opp: Set OPP pair (300000000 Hz, 660000 uv) on cpu0 |
undervolt 90mv:
1 | [ 0.454104] [ 0.454088]@4 add_opp: Set OPP pair (300000000 Hz, 580000 uv) on cpu0 |
评论
评论插件加载失败
正在加载评论插件