總覽

Android 設備包括幾個分區,它們在啟動過程中提供不同的功能。

標準隔斷

  • boot分區。該分區包含一個內核映像和一個使用mkbootimg組合的 ramdisk 映像。您可以使用虛擬分區直接刷新任一映像,而無需刷新新的引導分區。

    • 核心。虛擬kernel分區通過在舊內核映像上寫入新內核映像來覆蓋內核( zImagezImage-dtbImage.gz-dtb )。如果提供的開發內核不兼容,您可能需要使用關聯的內核模塊更新vendorsystemdtb分區(如果存在)。

    • 內存盤。虛擬ramdisk分區通過在舊 ramdisk 映像上寫入新 ramdisk 映像來覆蓋 ramdisk。

    覆蓋操作確定 eMMC 中現有鏡像的起始位置,並將新鏡像複製到該位置。新映像(內核或 ramdisk)可能比現有映像大;為了騰出空間,引導加載程序可以移動圖像之後的數據或放棄錯誤操作。

  • system分區。此分區包含 Android 框架。

  • odm分區。此分區包含原始設計製造商 (ODM) 對片上系統 (SoC) 供應商板支持包 (BSP) 的定制。此類定制使 ODM 能夠替換或定制 SoC 組件,並為特定於板的組件、守護程序和硬件抽象層 (HAL) 上的 ODM 特定功能實現內核模塊。這個分區是可選的;通常,它用於包含自定義,以便設備可以將單個供應商映像用於多個硬件 SKU。有關詳細信息,請參閱ODM 分區

  • odm_dlkm分區。此分區專用於存儲 ODM 內核模塊。將 ODM 內核模塊存儲在odm_dlkm分區(與odm分區相反)可以在不更新odm分區的情況下更新 ODM 內核模塊。

  • recovery分區。此分區存儲在 OTA 過程中啟動的恢復映像。支持無縫更新的設備可以將恢復映像存儲為引導映像中包含的 ramdisk(而不是單獨的映像)。

  • cache分區。此分區存儲臨時數據,如果設備使用無縫更新,則該分區是可選的。緩存分區不需要可從引導加載程序寫入,但需要可擦除。分區大小取決於設備類型和用戶數據空間的userdata ;通常,50 MB–100 MB 就足夠了。

  • misc分區。此分區由恢復分區使用,大小為 4 KB 或更大。

  • userdata分區。此分區包含用戶安裝的應用程序和數據,包括自定義數據。

  • metadata分區。當設備使用元數據加密時,此分區用於存儲元數據加密密鑰。大小為 16 MB 或更大。它未加密,其數據未快照。當設備恢復出廠設置時,它會被擦除。此分區的使用受到嚴格限制。

  • vendor分區。此分區包含任何不可分發到 AOSP 的二進製文件。如果設備不包含專有信息,您可以省略此分區。

  • vendor_dlkm分區。此分區專用於存儲供應商內核模塊。將供應商內核模塊存儲在vendor_dlkm分區(與vendor分區相反)可以在不更新vendor分區的情況下更新內核模塊。

  • radio分區。此分區包含無線電映像,並且只有在專用分區中包含帶有無線電特定軟件的無線電的設備才需要。

  • tos分區。此分區存儲 Trusty OS 的二進制映像,僅在設備包含 Trusty 時使用。有關詳細信息,請參閱TOS 分區

動態分區

運行 Android 11 及更高版本的設備可以支持動態分區,這是一種適用於 Android 的用戶空間分區系統,可以在無線 (OTA) 更新期間創建、調整大小或銷毀分區。有關詳細信息,請參閱動態分區

指定關鍵分區

如果設備需要特定分區或數據才能運行,您必須將這些分區/數據指定為完全受保護或可重新閃存,這意味著它們可以使用fastboot oem命令重新構建、提供或提取。這包括諸如每個設備的工廠特定設置、序列號、校準數據等數據。

Android 11 的變化

Android 11 對分區進行了多項更改,包括限制鏈接到庫和新的 Soong 圖像變體。

Android 分區佈局

圖 1. Android 11 中的分區佈局

  • 單一系統映像 (SSI)。包含systemsystem_ext圖像的新概念圖像。當這些分區對於一組目標設備是通用的時,這些設備可以共享 SSI 並跳過構建systemsystem_ext映像。

  • system_ext分區。可以使用system資源並且可以包含以下系統模塊的新分區:

    • system分區中擴展 AOSP 系統模塊。我們建議將此類模塊上傳到 AOSP,以便稍後將它們安裝到system分區。

    • 捆綁 OEM 或 SoC 特定模塊。我們建議取消捆綁此類模塊,以便將它們安裝到productvendor分區。

  • system分區。用於 OEM 產品的通用系統映像。我們建議將專有模塊移出system分區,方法是將它們上游到 AOSP 或將它們移到system_ext分區。

  • product分區。此分區現在可以使用允許的接口來安裝未與任何其他分區捆綁的產品特定模塊。

VNDK 更改

供應商本機開發工具包 (VNDK)是一組安裝在system分區中的庫,專為供應商實現其 HAL 而設計。

  • 在 Android 10 及更低版本中, vendor分區可以鏈接到system分區中的 VNDK 庫,但不能鏈接到system分區中的其他庫。 product分區中的本機模塊可以鏈接到system分區中的任何庫。

  • 在 Android 11 及更高版本中, productvendor分區可以鏈接到system分區中的 VNDK 庫,但不能鏈接到system分區中的其他庫。

宋產品變體

Soong構建系統使用映像變體來拆分構建依賴項。本機模塊( /build/soong/cc )可以將系統進程模塊變異為核心變體,將供應商進程模塊變異為供應商變體;一個圖像變體中的模塊無法鏈接到不同圖像變體中的其他模塊。

  • 在 Android 10 及更低版本中,系統模塊會自動創建核心變體。它還可以通過在其Android.bp文件中定義vendor_available: true來創建供應商變體;這使供應商模塊能夠鏈接到系統模塊。 VNDK 庫是system庫的供應商變體,也可以通過在其Android.bp文件中定義vendor_available: true來為供應商模塊創建供應商變體(參見示例)。

  • 在 Android 11 及更高版本中,系統模塊還可以通過定義vendor_available: true來創建產品變體(除了核心變體和供應商變體)。