前言

斐讯 N1 刷入 Armbian 固件后,使用镜像自带的 dtb 文件会导致负载居高不下,解决方案是替换为大佬们编译的低负载 dtb 文件。然而对于刚刷最新固件的我,正为找不到相关的 dtb 文件而发愁。那么旧版固件的 dtb 是否可以用在新版固件上?或者能不能自己编译呢?这些问题促使了我进行了一系列的探索。

分析 dtb 文件

刷完最新版(5.98)固件,直接使用镜像自带 dtb 文件开机后负载一路飙升。所以确实有必要对 dtb 文件进行替换。

为了弄清楚镜像自带 dtb 和大佬编译的 dtb 到底有什么区别,我提取了旧版本(5.97)固件中的 dtb 文件和相关低负载 dtb 文件,对它们进行了反编译。对比发现只是注释了一行代码,所以可以肯定这行代码就是解决高负载问题的关键。

然后对比了5.98版与5.97版自带的 dtb 文件,结果是相同的。这说明5.98版的 dtb 文件相对于5.97版没有进行过改动,那么它们的低负载 dtb 文件理论上可以通用。也就是说在自带 dtb 文件相同的情况下,低负载 dtb 文件不论版本都是通用的。

不过考虑到后续版本 dtb 文件可能会发生变化,那么自行编译低负载 dtb 文件才是正确的选择。所以我并没有直接使用已有的低负载 dtb 文件,而是进行了一次编译尝试。

编译低负载 dtb

  • 反编译固件自带的 dtb 文件
dtc -I dtb -O dts -o n1.dts /boot/dtb/amlogic/meson-gxl-s905d-phicomm-n1.dtb
  • 对反编译出的n1.dts文件进行编辑,修改关键代码
vim n1.dts
也可使用 SFTP 工具取回到 PC 再进行编辑。
  • 编译修改后的 dtb 文件
dtc -I dts -O dtb -o n1.dtb n1.dts
  • 覆盖固件自带的 dtb 文件
cp n1.dtb /boot/dtb/amlogic/meson-gxl-s905d-phicomm-n1.dtb
  • 重启
reboot

验证结果

重启开机后负载逐渐在下降。

经过几分钟的等待,负载降到了0。

尾巴

只要找对了方法和突破口,有些事远比你想象的简单。

参考资料

反编译及编译方法来源

对比的 dtb 文件来源