Boot 镜像与 dtb 文件详解:调校的物理载体
Android Boot 镜像是什么
Boot 镜像是 Android 设备启动时加载的第一个系统镜像,类似于 PC 上的引导扇区。它包含以下几个核心组件:
boot.img 结构
├── Boot Header(头部)
├── Kernel(内核主体)
├── Ramdisk(临时根文件系统)
├── Second Bootloader(二级引导,可选)
└── Device Tree Blob(dtb)← KonaBess 主要修改这里
你的手机每次正常开机,都会从存储里读取 boot.img,然后加载其中的 kernel 和 dtb。dtb 就是"告诉内核硬件长什么样、各组件参数多少"的那张配置表。
dtb 文件的角色
Device Tree 的设计理念是将硬件描述从驱动代码中剥离。这样做的好处是:
- 同一个内核可以适配不同硬件,只要换 dtb
- 修改硬件参数不需要重新编译驱动代码
- 厂商可以更灵活地调整同平台不同机型的硬件配置
高通骁龙平台的 GPU 相关参数就在 dtb 的 qcom,kgsl-3d0 节点下(KGSL 是 Qualcomm Graphics System Layer,高通的 GPU 驱动框架)。
GPU 频率表在 dtb 里长什么样
反编译 dtb 后,GPU DVFS 表大致是这样的结构:
qcom,kgsl-3d0 {
// GPU 支持的所有频率档位
qcom,gpu-freq-table = <
305000000 // 305 MHz
450000000 // 450 MHz
600000000 // 600 MHz
750000000 // 750 MHz
825000000 // 825 MHz
905000000 // 905 MHz(峰值)
>;
// 每个频率档对应的电压(单位 uV)
qcom,gpu-voltage-table = <
305000000 700000 // 305MHz → 0.70V
450000000 750000 // 450MHz → 0.75V
600000000 800000 // 600MHz → 0.80V
750000000 850000 // 750MHz → 0.85V
825000000 900000 // 825MHz → 0.90V
905000000 950000 // 905MHz → 0.95V
>;
};
KonaBess 做的事情就是:
- 读取这张表
- 展示成可视化界面
- 用户改完数值后写回
- 重新编译打包
为什么改 dtb 就能生效
因为 Android 内核启动时,GPU 驱动会直接读取 dtb 里的频率表和电压表来初始化。驱动不会去验证这些数值是不是"厂商原厂设的"——它只信 dtb 里写什么。
所以一旦你刷入了修改过 dtb 的 boot.img,GPU 驱动下次启动就会按你改过的频率和电压来工作。不需要 Magisk 模块、不需要 Xposed hook,纯粹是内核原生行为。
Vendor Boot 的情况
某些新机型(Android 12+)会把 dtb 拆到 vendor_boot.img 而不是 boot.img。KonaBess 会自动检测这个情况,优先处理 vendor_boot。两者的 dtb 修改逻辑完全一样,只是文件位置不同。