Android 分区详解:修订间差异

来自Uotan Wiki · 刷机百科
(initial commit)
 
无编辑摘要
第1行: 第1行:
Android 设备包含若干个分区,这些分区在Android启动和运行过程中发挥不同的作用。
Android 设备包含若干个分区,这些分区在Android启动和运行过程中发挥不同的作用。


为了支持 A/B 更新,设备需要为 boot、system、vendor 和 radio 分区分别单独配置一个槽位。部分设备为了支持 A/B 更新,把 boot、system、vendor 和 radio 配置了两个槽位(如:<code>system_a</code>,<code>system_b</code>)。
部分 A/B 设备为了支持无缝更新,把 boot、system、vendor 和 radio 配置了两个槽位(如:<code>system_a</code>,<code>system_b</code>)。


== 常见分区​ ==
== 常见分区​ ==


=== boot 分区​ ===
* '''<code>boot</code> 分区''':此分区包含一个内核映像,使用 <code>mkbootimg</code> 创建。您可以使用虚拟分区直接刷写任意映像,而无需刷写新的 boot 分区。 此分区还包含在 Android 13 之前发布的设备中的通用 ramdisk。
系统启动时引导的分区
** kernel:<code>kernel</code> 虚拟分区通过将新内核映像写入旧内核映像来覆盖内核(<code>zImage</code>、<code>zImage-dtb</code>、<code>Image.gz-dtb</code>)。如果提供的开发内核不兼容,则可能需要使用关联的内核模块更新 <code>vendor</code><code>system</code> 或 <code>dtb</code> 分区(如果存在)。
 
** ramdisk:<code>ramdisk</code> 虚拟分区通过将新 ramdisk 映像写入旧 ramdisk 映像来覆盖 ramdisk。
TIP
* '''<code>init_boot</code> 分区''':此分区包含发布时搭载 Android 13 及更高版本的设备的通用 ramdisk。
 
* '''<code>system</code> 分区''':此分区包含 Android 框架。
Android 8.0 以前刷机需要连同 <code>boot.img</code> 一起刷入。之后由于引入了 Project Treble 的缘故,可以跳过此分区,直接刷 <code>system.img</code>
* '''<code>odm</code> 分区''':此分区包含原始设计制造商 (ODM) 对系统芯片 (SoC) 供应商板级支持包 (BSP) 的自定义设置。利用此类自定义设置,ODM 可以替换或自定义 SoC 组件,并在硬件抽象层 (HAL) 上为板级组件、守护程序和 ODM 特定的功能实现内核模块。此分区是可选的;通常情况下,它用于存储自定义设置,以便设备可以针对多个硬件 SKU 使用单个供应商映像。如需了解详情,请参阅 ODM 分区。
 
* '''<code>odm_dlkm</code> 分区''':此分区专门用于存储 ODM 内核模块。将 ODM 内核模块存储在 <code>odm_dlkm</code> 分区(而不是 <code>odm</code> 分区)中后,无需更新 <code>odm</code> 分区即可更新 ODM 内核模块。
=== init_boot 分区 (Android 13+)​ ===
* '''<code>recovery</code> 分区''':此分区会存储在 OTA 过程中启动的恢复映像。支持无缝更新的设备可以将恢复映像存储为 <code>boot</code> 或 <code>init_boot</code> 映像中包含的 ramdisk(而不是单独的映像)。
此分区包含用于出厂搭载 Android 13 及更高版本的设备的通用 ramdisk。
* '''<code>cache</code> 分区''':此分区会存储临时数据,如果设备使用无缝更新,则此分区是可选的。cache 分区并非必须可从引导加载程序写入,但必须可清空。此分区大小取决于设备类型和 <code>userdata</code> 上的可用空间。通常,50 MB 至 100 MB 就足够了。
 
* '''<code>misc</code> 分区''':此分区供 recovery 分区使用,大小为 4 KB 或更大。
=== system 分区​ ===
* '''<code>userdata</code> 分区''':此分区包含用户安装的应用和数据,包括自定义数据。
此分区包含 Android 框架。
* '''<code>metadata</code> 分区''':此分区用于在设备使用元数据加密时存储元数据加密密钥。大小为 16 MB 或更大。此分区未经加密,且系统不会对其数据拍摄快照。数据会在设备恢复出厂设置时被清空。此分区的使用受到严格限制。
 
* '''<code>vendor</code> 分区''':此分区包含所有无法分发给 AOSP 的二进制文件。如果设备不包含专有信息,则可以忽略此分区。
=== recovery 分区​ ===
* '''<code>vendor_dlkm</code> 分区''':此分区专门用于存储供应商内核模块。将供应商内核模块存储在 <code>vendor_dlkm</code> 分区(而不是 <code>vendor</code> 分区)中后,无需更新 <code>vendor</code> 分区即可更新内核模块。
此分区存储在 OTA 过程中启动的恢复映像。支持无缝更新的设备可以将恢复映像存储为 <code>boot</code> 或 <code>init_boot</code> 映像中包含的 ramdisk(而不是单独的映像)。
 
== 其他分区​ ==
 
=== cache 分区​ ===
此分区存储临时数据,如果设备使用无缝更新,则该分区是可选的。缓存分区不需要可从引导加载程序写入,但需要可擦除。分区大小取决于设备类型和用户数据空间的 <code>userdata</code> ;通常,50 MB–100 MB 就足够了。
 
=== vendor 分区​ ===
此分区包含任何不可分发到 AOSP 的二进制文件。如果设备不包含专有信息,您可以省略此分区。


== 动态分区 ==
== 动态分区 ==

2024年8月17日 (六) 19:30的版本

Android 设备包含若干个分区,这些分区在Android启动和运行过程中发挥不同的作用。

部分 A/B 设备为了支持无缝更新,把 boot、system、vendor 和 radio 配置了两个槽位(如:system_asystem_b)。

常见分区​

  • boot 分区:此分区包含一个内核映像,使用 mkbootimg 创建。您可以使用虚拟分区直接刷写任意映像,而无需刷写新的 boot 分区。 此分区还包含在 Android 13 之前发布的设备中的通用 ramdisk。
    • kernel:kernel 虚拟分区通过将新内核映像写入旧内核映像来覆盖内核(zImagezImage-dtbImage.gz-dtb)。如果提供的开发内核不兼容,则可能需要使用关联的内核模块更新 vendorsystemdtb 分区(如果存在)。
    • ramdisk:ramdisk 虚拟分区通过将新 ramdisk 映像写入旧 ramdisk 映像来覆盖 ramdisk。
  • init_boot 分区:此分区包含发布时搭载 Android 13 及更高版本的设备的通用 ramdisk。
  • system 分区:此分区包含 Android 框架。
  • odm 分区:此分区包含原始设计制造商 (ODM) 对系统芯片 (SoC) 供应商板级支持包 (BSP) 的自定义设置。利用此类自定义设置,ODM 可以替换或自定义 SoC 组件,并在硬件抽象层 (HAL) 上为板级组件、守护程序和 ODM 特定的功能实现内核模块。此分区是可选的;通常情况下,它用于存储自定义设置,以便设备可以针对多个硬件 SKU 使用单个供应商映像。如需了解详情,请参阅 ODM 分区。
  • odm_dlkm 分区:此分区专门用于存储 ODM 内核模块。将 ODM 内核模块存储在 odm_dlkm 分区(而不是 odm 分区)中后,无需更新 odm 分区即可更新 ODM 内核模块。
  • recovery 分区:此分区会存储在 OTA 过程中启动的恢复映像。支持无缝更新的设备可以将恢复映像存储为 bootinit_boot 映像中包含的 ramdisk(而不是单独的映像)。
  • cache 分区:此分区会存储临时数据,如果设备使用无缝更新,则此分区是可选的。cache 分区并非必须可从引导加载程序写入,但必须可清空。此分区大小取决于设备类型和 userdata 上的可用空间。通常,50 MB 至 100 MB 就足够了。
  • misc 分区:此分区供 recovery 分区使用,大小为 4 KB 或更大。
  • userdata 分区:此分区包含用户安装的应用和数据,包括自定义数据。
  • metadata 分区:此分区用于在设备使用元数据加密时存储元数据加密密钥。大小为 16 MB 或更大。此分区未经加密,且系统不会对其数据拍摄快照。数据会在设备恢复出厂设置时被清空。此分区的使用受到严格限制。
  • vendor 分区:此分区包含所有无法分发给 AOSP 的二进制文件。如果设备不包含专有信息,则可以忽略此分区。
  • vendor_dlkm 分区:此分区专门用于存储供应商内核模块。将供应商内核模块存储在 vendor_dlkm 分区(而不是 vendor 分区)中后,无需更新 vendor 分区即可更新内核模块。

动态分区

搭载 Android 11 及更高版本的设备可以支持动态分区,此类分区属于 Android 的用户空间分区系统,支持在无线下载 (OTA) 更新期间创建和销毁分区以及调整分区大小。使用此分区系统,您可以在无线下载 (OTA) 更新期间创建、销毁分区或者调整分区大小。借助动态分区,供应商无需担心各个分区(例如 systemvendorproduct)的大小。取而代之的是,设备会分配一个 super 分区,其中的子分区可动态调整大小。各个分区映像不再需要为将来的 OTA 预留空间。相反,super 中剩余的可用空间还可用于所有动态分区。

参考资料(来自AOSP文档):https://source.android.com/docs/core/architecture/partitions?hl=zh-cn#standard-partitions