Android恢复启动过程中的分区块内容详解

9次阅读
没有评论

问题描述

在使用 fastboot flash recovery 命令将自定义恢复分区镜像写入设备时,所写的分区内容是什么?根据理解,恢复分区包含了内核和初始化压缩文件(initrd.img)。那么这些会存储到 /boot 分区吗?当通过 fastboot 显式指定 recovery 分区的时候,在设备上使用自定义恢复分区后,/boot/recovery 分区的内容是否是分开存储的?如果是这样,启动过程中的系统初始化脚本(init.rc)会是什么样的分工?

解决方案

方案1

请注意所有操作都需在已备份文件系统的前提下进行,风险自负。
fastboot flash recovery <my_recovery_image>.img 命令执行时,实际写入的是设备的恢复分区(/recovery)。

恢复分区的角色与内容

  • 内核与初始化压缩包 (initrd.img):自定义恢复分区包含的是运行在引导过程中的内核及其初始化根文件系统 (initramfs)。它们不是直接存储在 /boot 分区,而是存入 /recovery 分区,以支撑后续的系统安装或其他修复操作。

boot vs. recovery 分区差异分析

  • 内核版本:通常情况下,即使设置了不同的启动模式(如 bootrecovery),两个系统分区中的内核都是相同的。因此,没有必要在 /boot/recovery 中各自存储不同版本的内核。

  • 初始化脚本差异:确实存在一个专门的脚本用于恢复启动期间执行的操作,即通常叫做 init.rc.recovery 的文件或脚本,它负责处理特定于恢复模式的任务。这个脚本与普通引导模式下的 init.rc 是不同的。

  • init.rc: 负责正常引导路径中设备、系统和应用程序的初始化工作。
  • init.rc.recovery: 这个脚本被设计为在恢复启动过程中运行特定于任务的操作,如安装新的系统映像、清除旧的数据等。

  • 引导加载程序与分区角色:实际的内核部分由引导加载程序负责管理其加载过程。大多数情况下,内核和相关的 initramfs 被存放在 /boot 分区中的文件系统提供这些支持。

  • 内存存储设备(如 SD卡)上的 /boot 分区主要包含初始化压缩包 (initrd.img) 和内核二进制文件等。

恢复流程总结

在恢复模式下,设备首先执行的是 init.rc.recovery 脚本或者一个类似的初始化代码段。这种设置可以在引导过程中的特定阶段处理特定的任务,例如从网络下载更新、手动安装新的文件系统和/或应用。

方案2

通过以下内容进一步验证并确认上述理解:
检查 /recovery 分区:使用 adb shell 通过内置的恢复分区工具(通常是TWRP或CWM)访问设备,查看此分区的具体镜像形式。
分析内核和引导数据:将写入后的恢复分区内容与自定义或标准系统文件进行对比,验证其是否符合预期配置。
脚本审查:检查相关固件内的 init.rc 和可能存在的 init.rc.recovery 文件,确认两个版本之间的详细区别。

这样不仅能确保您对设备启动过程有更深的理解,并且可为潜在的恢复错误提供有效的测试和诊断手段。同时,请务必留意操作风险,在进行文件系统级别的修改前做好充分准备与测试。

正文完