Android 設備包括幾個分區,它們在啟動過程中提供不同的功能。
標準隔斷
boot
分區。該分區包含一個內核映像和一個使用mkbootimg
組合的 ramdisk 映像。您可以使用虛擬分區直接刷新任一映像,而無需刷新新的引導分區。核心。虛擬
kernel
分區通過在舊內核映像上寫入新內核映像來覆蓋內核(zImage
、zImage-dtb
、Image.gz-dtb
)。如果提供的開發內核不兼容,您可能需要使用關聯的內核模塊更新vendor
、system
或dtb
分區(如果存在)。內存盤。虛擬
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 圖像變體。
圖 1. Android 11 中的分區佈局
單一系統映像 (SSI)。包含
system
和system_ext
圖像的新概念圖像。當這些分區對於一組目標設備是通用的時,這些設備可以共享 SSI 並跳過構建system
和system_ext
映像。system_ext
分區。可以使用system
資源並且可以包含以下系統模塊的新分區:在
system
分區中擴展 AOSP 系統模塊。我們建議將此類模塊上傳到 AOSP,以便稍後將它們安裝到system
分區。捆綁 OEM 或 SoC 特定模塊。我們建議取消捆綁此類模塊,以便將它們安裝到
product
或vendor
分區。
system
分區。用於 OEM 產品的通用系統映像。我們建議將專有模塊移出system
分區,方法是將它們上游到 AOSP 或將它們移到system_ext
分區。product
分區。此分區現在可以使用允許的接口來安裝未與任何其他分區捆綁的產品特定模塊。
VNDK 更改
供應商本機開發工具包 (VNDK)是一組安裝在system
分區中的庫,專為供應商實現其 HAL 而設計。
在 Android 10 及更低版本中,
vendor
分區可以鏈接到system
分區中的 VNDK 庫,但不能鏈接到system
分區中的其他庫。product
分區中的本機模塊可以鏈接到system
分區中的任何庫。在 Android 11 及更高版本中,
product
和vendor
分區可以鏈接到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
來創建產品變體(除了核心變體和供應商變體)。