Ramdisk 分区

在 Android 10 和 11 中,第一阶段 ramdisk 包含第一阶段 init 二进制文件(执行 fstab 条目指定的早期挂载)和供应商 fstab 文件。(与 Android 9 及更低版本一样,system.img 包含 $TARGET_ROOT_OUT 的内容。)

  • 对于具有启动 ramdisk (非 A/B) 的设备,第一阶段 init 是位于 /init 的静态可执行文件。这些设备将 system.img 挂载为 /system,然后执行切换根目录操作,将 /system 处的挂载移至 /。挂载完成后,ramdisk 的内容将被释放。

  • 对于使用恢复模式作为 ramdisk 的设备,第一阶段 init 位于恢复 ramdisk 中的 /init。这些设备首先切换根目录到 /first_stage_ramdisk 以从环境中移除恢复组件,然后以与具有启动 ramdisk 的设备相同的方式继续操作(即,将 system.img 挂载为 /system,切换根目录以将该挂载移至 /,并在挂载后释放 ramdisk 内容)。如果内核命令行中(或从 Android 12 开始的 bootconfig 中)存在 androidboot.force_normal_boot=1,则设备将正常启动(进入 Android),而不是启动进入恢复模式。

第一阶段 init 完成后,它会使用 selinux_setup 参数执行 /system/bin/init,以编译 SELinux 并将其加载到系统上。最后,init 会再次使用 second_stage 参数执行 /system/bin/init。此时,init 的主阶段运行,并使用 init.rc 脚本继续启动过程。

以下部分详细介绍了 Android 10 之前和之后非 A/B 设备的分区布局差异。

分区布局(非 A/B 设备)

以下部分详细介绍了 Android 10 之前和之后非 A/B 设备的分区布局差异。

boot.img

Ramdisk
(Android 8.x 及更低版本)
System as root
(Android 9)
Ramdisk
(Android 10 和 11)

包含内核和 ramdisk.img

ramdisk.img
  -/
    - init.rc
    - init
    - etc -> /system/etc
    - system/ (mount point)
    - vendor/ (mount point)
    - odm/ (mount point)
    ...
    
仅包含正常启动内核。

包含内核和 ramdisk.img

ramdisk.img
  -/
    - init
    - vendor fstab files
    - system/ (mount point)
    - vendor/ (mount point)
    - odm/ (mount point)
    ...
    

recovery.img

包含恢复内核和恢复 ramdisk.img

system.img

Ramdisk
(Android 8.x 及更低版本)
System as root
(Android 9)
Ramdisk
(Android 10 和 11)

包含 system.img

system.img
  -/
    - bin/
    - etc
    - vendor -> /vendor
    - ...
   

包含 $TARGET_SYSTEM_OUT$TARGET_ROOT_OUT 的合并内容。

system.img
  -/
    - init.rc
    - init
    - etc -> /system/etc
    - system/
      - bin/
      - etc/
      - vendor -> /vendor
      - ...
    - vendor/ (mount point)
    - odm/ (mount point)
    ...
    

包含 $TARGET_SYSTEM_OUT$TARGET_ROOT_OUT 的合并内容。

system.img
  -/
    - init.rc
    - init -> /system/bin/init
    - etc -> /system/etc
    - system/
      - bin/
      - etc/
      - vendor -> /vendor
      - ...
    - vendor/ (mount point)
    - odm/ (mount point)
    ...
    

分区布局(A/B 设备)

以下部分详细介绍了 Android 10 之前和之后 A/B 设备的分区布局差异。

boot.img

System as root
(Android 9)
Ramdisk
(Android 10 和 11)
包含正常启动内核和恢复 ramdisk (BOARD_USES_RECOVERY_AS_BOOT := true)。

恢复 ramdisk 仅用于启动进入恢复模式。
包含正常启动内核和恢复 ramdisk (BOARD_USES_RECOVERY_AS_BOOT := true)。

恢复 ramdisk 用于启动进入恢复模式和 Android。
ramdisk.img
  -/
    - init -> /system/bin/init
    - first_stage_ramdisk
       - vendor fstab files
    - etc -> /system/etc
    - system/ (mount point)
    - vendor/ (mount point)
    - odm/ (mount point)
    ...
    

system.img

包含 $TARGET_SYSTEM_OUT$TARGET_ROOT_OUT 的合并内容。

system.img
  -/
    - init.rc
    - init -> /system/bin/init
    - etc -> /system/etc
    - system/
      - bin/
      - etc/
      - vendor -> /vendor
      - ...
    - vendor/ (mount point)
    - odm/ (mount point)
    ...