總覽

Android 裝置包含多個分割區,可在啟動程序中執行不同功能。

標準分區

  • boot 區隔。這個分割區包含核心映像檔,並使用 mkbootimg 建立。您可以使用虛擬分區直接閃記任一映像檔,而無須閃記新的開機分區。這個分割區也包含 Android 13 之前推出裝置中的通用 RAM 磁碟。

    • kernel. 虛擬 kernel 分區會在舊核心映像檔上寫入新的核心映像檔,藉此覆寫核心 (zImagezImage-dtbImage.gz-dtb)。如果提供的開發核心不相容,您可能需要使用相關的核心模組更新 vendorsystemdtb 分區 (如有)。

    • ramdisk. 虛擬 ramdisk 分割區會將新 ramdisk 映像檔寫入舊 ramdisk 映像檔,藉此覆寫 ramdisk。

    覆寫作業會判斷 eMMC 中現有映像檔的起始位置,並將新映像檔複製到該位置。新的映像檔 (核心或 RAM 磁碟區) 可能會比現有映像檔大;為了釋出空間,Bootloader 可以移動映像檔後方的資料,或放棄操作並顯示錯誤。

  • init_boot 區隔。這個分割區包含一般 RAM 磁碟,適用於搭載 Android 13 以上版本的裝置。

  • 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 映像檔中包含的 RAM 磁碟 (而非個別映像檔)。

  • cache 區隔。這個分割區會儲存臨時資料,如果裝置使用無縫更新,則可選使用。快取分區不需要透過系統啟動載入程式寫入,但需要能夠擦除。分割區大小取決於裝置類型和 userdata 的可用空間;通常 50 MB 至 100 MB 就足夠了。

  • misc 區隔。這個分區由復原分區使用,大小為 4 KB 以上。

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

  • metadata 分區。當裝置使用中繼資料加密時,這個分區可用於儲存中繼資料加密金鑰。檔案大小為 16 MB 以上。不會加密,也不會擷取快照。裝置恢復原廠設定時會遭到刪除。這個分區的使用方式受到嚴格限制。

  • vendor 區隔。這個分割區包含任何無法分發至 Android 開放原始碼計畫的二進位檔。如果裝置不含專屬資訊,您可以略過這個分割區。

  • vendor_dlkm 區隔。這個分割區專門用於儲存供應商核心模組。將供應商核心模組儲存在 vendor_dlkm 分區 (而非 vendor 分區) 中,可以直接更新核心模組,而不必更新 vendor 分區。

  • radio 區隔。這個分割區包含無線電映像檔,只有在裝置中含有無線電,且在專用分割區中含有無線電專屬軟體時,才需要這個分割區。

  • tos 分區。這個分割區會儲存 Trusty OS 的二進位映像檔,且只有在裝置包含 Trusty 時才會使用。詳情請參閱「TOS 區隔」。

  • pvmfw 區隔。這個分割區會儲存受保護的虛擬機器韌體 (pvmfw),這是在受保護的 VM 中執行的第一個程式碼。詳情請參閱「受保護的虛擬機器韌體」。

動態分割區

搭載 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 產品子類

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 程式庫無法供產品模組使用。