刷机、改内核参数、玩 Magisk 打补丁,第一步都是把 boot.img 从手机里弄出来。看着玄乎,其实分两步:先把分区镜像拷到电脑,再解开它内部的格式。

第一步:把分区镜像拿出来

前提是手机已经解锁 bootloader,否则分区压根读不出来。常见方式有三种:

  • 厂商固件包:很多品牌在官网提供完整固件,里面直接带 boot.img,这是最省事也最安全的路子,不用连手机。
  • adb 与 root 权限:有 root 时可以通过 dd 命令读取分区,命令是 dd if=/dev/block/bootdevice/by-name/boot of=/sdcard/boot.img,分区路径因设备而异。
  • fastboot 读取:部分设备支持 fastboot 直接拉取分区,但不是所有机型都开放。

拿到文件先看大小,一般几十兆,太小说明拷失败了。

第二步:解包 boot.img

这一步要看它是什么格式。老设备是 Android boot image,新设备(Android 11 之后)大量使用 vendor_boot,Google 也推了 GKI 方案,解包工具不一样。

# 常用工具
unpack_bootimg --boot_img boot.img --out out
mkbootimg --unpack-bootimg

解出来通常是这三样:内核 kernel、内存盘 ramdisk(压缩的 cpio 或 gz)、以及一个用来构建新镜像的头信息。新版还会拆出 vendor_ramdisk 和 bootconfig。

解开 ramdisk

ramdisk 是 gzip 压缩的 cpio 归档,老办法是:

gunzip -c ramdisk.gz | cpio -idmv

新格式可能是 lz4 或者稀疏镜像,需要对应工具。解出的目录里能看到 init.rc、fstab,有些设备还有 fstab.qcom 这类硬件相关配置。

要谨慎的几件事

  • AVB 校验:安卓启用了 verified boot,改过的镜像签名对不上,开机直接红字或者不断重启。
  • 分区大小限制:改完的镜像不能超过原分区,否则刷写失败。
  • 备份原版:动手前把原始 boot.img 存好,出问题还能刷回。
  • 机型差异:同一个命令换个机型就不一定管用,工具版本要看对应机型的帖子和工具说明。

想给内核打补丁的话,还要拿到对应版本的内核源码,单独改 boot.img 里的内核是不行的。老实说,玩到这一步,先确认自己有没有刷回原厂的把握再动手。