總覽

Android 裝置包含多個分區,它們在啟動過程中提供不同的功能。

標準隔間

  • boot分區。此分割區包含核心映像並使用mkbootimg建立。您可以使用虛擬分割區直接刷新任一映像,而無需刷新新的啟動分割區。此分區還包含 Android 13 之前推出的裝置中的通用 ramdisk。

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

    • 虛擬磁碟。虛擬ramdisk分割區透過將新的 ramdisk 映像寫入舊的 ramdisk 映像來覆寫 ramdisk。

    覆寫操作確定 eMMC 中現有映像的起始位置,並將新映像複製到該位置。新映像(核心或 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分區。此分區儲存臨時數據,如果裝置使用無縫更新,則該分割區是可選的。快取分區不需要可從引導程式寫入,但需要可擦除。分割區大小取決於設備類型和userdata上的空間可用性;通常,50 MB–100 MB 就足夠了。

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

  • userdata分區。此分割區包含使用者安裝的應用程式和數據,包括自訂資料。

  • metadata分區。當裝置使用元資料加密時,此分割區用於儲存元資料加密金鑰。大小為 16 MB 或更大。它未加密,其資料也未快照。當設備恢復出廠設定時,它會被刪除。該分區的使用受到嚴格限制。

  • vendor分區。此分割區包含任何不可分發到 AOSP 的二進位檔案。如果設備不包含專有訊息,您可以忽略此分割區。

  • vendor_dlkm分區。此分區專用於儲存供應商核心模組。將供應商核心模組儲存在vendor_dlkm分區(而不是vendor分區)中使得可以在不更新vendor分區的情況下更新核心模組。

  • radio分區。該分區包含無線電影像,並且僅對於在專用分區中包含具有無線電專用軟體的無線電的設備才需要。

  • tos分區。此分割區儲存 Trusty 作業系統的二進位映像,僅當裝置包含 Trusty 時才使用。有關詳細信息,請參閱TOS 分區

  • pvmfw分區。此分區儲存受保護虛擬機器韌體 (pvmfw),它是受保護虛擬機器中運行的第一個代碼。有關更多詳細信息,請參閱受保護的虛擬機器韌體

動態分割區

運行 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來建立產品變體(除了核心變體和供應商變體)。

  • 在 Android 12 或更高版本中, vendor_available: true系統模組除了核心變體之外還會建立供應商變體。要建立產品變體,必須定義product_available: true 。某些不含product_available: true VNDK 函式庫不可用於產品模組。