我的环境:
电脑: ubuntu 理论上windows也可以,自行下载工具
手机:一加11 crdroid11系统 安卓15 要求解锁bl并root
工具安装
sudo apt install android-tools-fastboot android-tools-adb libfdt-dev device-tree-compiler
# mkdtimg需要自己编译,理论上python版本也可以使用
# 我这里使用github上的一个fork 包含完整的makefile比较方便 官方版本在这 https://android.googlesource.com/platform/system/libufdt/+/refs/heads/master/utils/src/
git clone https://github.com/affggh/mkdtimg
cd mkdtimg
make mkdtimg
cd ..
提取dtbo.img
adb shell
su
# 获取当前插槽
getprop ro.boot.slot_suffix
# 这里的_a _b按照上一条命令的返回修改
dd if=/dev/block/by-name/dtbo_a of=/sdcard/dtbo.img
exit
exit
adb pull /sdcard/dtbo.img
解包dtbo.img
mkdir dtbo
./mkdtimg/mkdtimg dump dtbo.img -b ./dtbo/dtbo
通过
mkdir dts
# 这里的0..8可以观察上一步返回值进行修改
for i in {0..8}; do
dtc -I dtb -O dts -f -o ./dts/dts.${i} ./dtbo/dtbo.${i}
done
查找到电池容量位于/fragment@47/__overlay__ qcom,batt_capacity_mah节点中
如果直接在反编译出来的文件中修改并编译的话,系统音频异常,并且我注意到编译时有waring,可能是缺失依赖(甚至试过在这里添加自己的dtbo,但是无法加载,兜兜转转又回到了老朋友fdtput这里)
修改电池容量
# 如果文件数量和我不同自行修改
fdtput -v -t x ./dtb/dtbo.0 /fragment@47/__overlay__ qcom,batt_capacity_mah 0x17d4
fdtput -v -t x ./dtb/dtbo.1 /fragment@47/__overlay__ qcom,batt_capacity_mah 0x17d4
fdtput -v -t x ./dtb/dtbo.2 /fragment@47/__overlay__ qcom,batt_capacity_mah 0x17d4
fdtput -v -t x ./dtb/dtbo.3 /fragment@47/__overlay__ qcom,batt_capacity_mah 0x17d4
fdtput -v -t x ./dtb/dtbo.4 /fragment@47/__overlay__ qcom,batt_capacity_mah 0x17d4
fdtput -v -t x ./dtb/dtbo.5 /fragment@47/__overlay__ qcom,batt_capacity_mah 0x17d4
fdtput -v -t x ./dtb/dtbo.6 /fragment@47/__overlay__ qcom,batt_capacity_mah 0x17d4
fdtput -v -t x ./dtb/dtbo.7 /fragment@47/__overlay__ qcom,batt_capacity_mah 0x17d4
fdtput -v -t x ./dtb/dtbo.8 /fragment@47/__overlay__ qcom,batt_capacity_mah 0x17d4
我这里替换的为一加ace3pro的电池,容量为6100mah,换算为16进制就是0x17d4
打包!
# 这里的page_size按照提取时返回的page_size设置
./mkdtimg/mkdtimg create new_dtbo.img --page_size=4096 dtb/dtbo.*
可以通过./mkdtimg/mkdtimg dump new_dtbo.img检查格式是否正确,对比原文件大小是否发生变化
开刷!
先重启到fastbootd或bootloader,我的机器修改过ocdt分区,bootloader无法进入,此时可以通过系统重启到fastbootd(需要在设置中勾选高级重启)

进入后
fastboot flash dtbo new_dtbo.img
fastboot reboot
好了,打开设置->电池->电池信息 截图装逼去吧
