刷入一个自定义 ROM,手机里到底发生了什么
前几篇分别聊了 Bootloader 解锁和 A/B 分区,这篇把这几个概念串起来,讲讲”刷机”——也就是刷入一个自定义 ROM——这个动作背后,设备存储上实际发生了什么。
先明确:ROM 是什么
这里说的 ROM,不是硬件意义上的只读存储芯片,而是安卓圈约定俗成的说法,指的是一整套打包好的系统镜像文件,通常包含 boot(内核和启动相关)、system(系统本体)、vendor(厂商适配层驱动)等几个核心分区各自对应的镜像文件。厂商发布的官方系统本质上也是一个 ROM,只是一般不会被单独拿出来叫这个名字;“自定义 ROM”特指社区或者第三方基于开源代码(通常是 AOSP,或者在其基础上二次开发的分支)重新打包出来的系统。
Recovery:刷机时真正在跑的环境
正常使用时设备跑的是安卓系统本身,但写入这些底层分区的操作不会在安卓系统里直接进行——原因很直接,安卓系统运行时,自己所在的分区正被自己占用读取,没法安全地被覆盖写入。
真正执行写入操作的,是一个独立于安卓系统之外的小型运行环境,叫 Recovery。设备可以通过特定的按键组合或者指令进入这个环境,它本质上是一个极简的 Linux 系统,只加载了刷机所必需的最小功能集(读取存储介质、显示简单界面、执行分区写入)。官方 Recovery 功能通常很有限(基本只能恢复出厂设置、应用官方 OTA 包);第三方自定义 Recovery(比如 TWRP 这类)功能会更完整,支持读取外部存储里的第三方 ROM 包、手动挂载分区、做完整备份等操作。
写入过程实际做了什么
进入 Recovery 环境、选定要刷入的 ROM 包之后,大致流程是:
- Recovery 读取 ROM 包内容,按照包内的脚本(通常是 Edify 或者 updater-script 格式)逐步执行
- 脚本会依次对 boot、system、vendor 等目标分区做擦除,然后把包内对应的镜像内容写入进去,相当于把这几个分区原有的内容整个替换掉
- 如果设备是前面提到的 A/B 分区结构,写入目标通常是当前闲置的那个 slot,写完之后再切换启动标记
- 写入完成后,Recovery 会给出成功或失败的提示,用户手动选择重启进入系统
这套流程一旦在写入过程中被打断——比如意外断电、存储介质接触不良——被写了一半的分区就会处于内容不完整的状态,而这类分区往往是系统启动必需的,一旦损坏,设备很可能没法正常进入 Bootloader 之外的任何环境,也就是常说的”变砖”。这也是为什么严肃的刷机教程都会强调”确保电量充足、别用会突然断连的数据线”。
前提:Bootloader 得先松口
这整套流程能跑起来的前提,是设备的 Bootloader 处于解锁状态,或者至少允许加载非官方签名的 Recovery 环境——否则 Bootloader 在校验阶段就会直接拒绝加载这个第三方 Recovery,更不用说后面写入自定义 ROM 了,这也是为什么”解锁 Bootloader”几乎总是刷机教程里的第一步。
小结
刷机说到底是”进入一个独立于安卓系统之外的最小环境,把几个关键分区的内容整个替换掉”这么一件事。Recovery 负责提供这个可以安全写入的环境,ROM 包里的脚本负责具体执行擦除和写入,而 Bootloader 的解锁状态则是这一切能不能发生的前提开关。理解了这条链路,再看”刷机教程”里的每一步,大概就知道具体在操作哪一层了。