ODM 分區

Android 10 支持使用 Android 構建系統構建odm分區。

關於 ODM 分區

原始設計製造商 (ODM) 為其特定設備(他們的板)定製片上系統 (SoC) 供應商板支持包 (BSP)。這使他們能夠為特定於板的組件、特定於板的守護進程或他們自己在硬件抽象層 (HAL) 上的功能實現內核模塊。他們可能還想更換或定制 SoC 組件。

在較低的 Android 版本中,此類自定義阻止了對具有相同 SoC(或具有不同 SoC,但屬於同一系列)的設備使用單個供應商映像。在 Android 10 及更高版本中,您可以使用單獨的odm分區進行自定義,這使您能夠將單個供應商映像用於多個硬件 SKU。

使用產品和 ODM 分區

Android 9 增加了對構建product分區的支持,支持對不同product.img映像提供的多個軟件 SKU 使用單個系統映像。 product分區適用於軟件 SKU,而odm分區適用於硬件 SKU。

通過專用產品和 ODM 分區,您可以使用system分區來託管通用代碼以在許多軟件 SKU 之間共享,並使用vendor分區來託管特定於 SoC 的 BSP 代碼以在基於給定 SoC 的多個設備之間共享。

使用單獨的分區有缺點,例如管理磁盤空間的困難(例如,您必須為將來的增長保留有限的空間)。但是,Android 10 對動態分區的支持消除了磁盤問題,並且可以在無線 (OTA)更新期間對設備進行重新分區。

ODM 組件

odm分區包含以下特定於 ODM 的組件(類似於vendor分區),如下表所示。

ODM 特定組件地點
可加載內核模塊 (LKM) /odm/lib/modules/*.ko
本機庫/odm/lib[64]
HAL /odm/lib[64]/hw
SEPolicy /odm/etc/selinux
VINTF 對像數據/odm/etc/vintf
init.rc文件/odm/etc/init
系統屬性/odm/build.prop
運行時資源覆蓋 (RRO) /odm/overlay/*.apk
應用/odm/app/*.apk
私人應用/odm/priv-app/*.apk
Java 庫/odm/framework/*.jar
Android 框架系統配置/odm/etc/sysconfig/*/odm/etc/permissions/*

沒有自定義圖像

不要使用自定義圖像,因為它們缺乏對以下內容的支持:

  • 將模塊安裝到特定目標。自定義映像支持將工件複製到映像中,但無法通過將目標分區指定為構建規則的一部分來將模塊安裝到特定分區中。
  • 很快。無法使用 Soong 構建系統構建custom_images
  • OTA 更新。自定義映像用作無法 OTA 編輯的工廠 ROM 映像。

維護分區之間的 ABI

odm分區是vendor分區的擴展。在考慮應用程序二進制接口 (ABI) 穩定性時,請牢記以下架構。

維護分區之間的 ABI
圖 1.在分區之間維護 ABI
  • odmvendor分區之間沒有 ABI 穩定性。兩個分區必須同時升級。
  • odmvendor分區可以相互依賴,但vendor分區必須在沒有odm分區的情況下工作。
  • odmsystem之間的 ABI 與vendorsystem之間的 ABI 相同。

product分區與vendorodm分區之間不允許直接交互。 (這是由 SEpolicy 強制執行的。)

實現 ODM 分區

在實施新分區之前,請查看相關的 AOSP 更改

設置 ODM 分區

要設置odm分區,請包含以下構建標誌:

  • BOARD_ODMIMAGE_PARTITION_SIZE用於固定分區大小
  • PRODUCT_USE_DYNAMIC_PARTITIONSBOARD_ODMIMAGE_PARTITION_RESERVED_SIZE用於動態分區大小
  • BOARD_ODMIMAGE_FILE_SYSTEM_TYPE用於 ODM 映像的文件系統類型
  • /odm/build.propPRODUCT_ODM_PROPERTIES用於$(call inherit-product path/to/device.mk) ,如PRODUCT_ODM_PROPERTIES += product.abc=ok

將模塊安裝到 ODM 分區

使用這些構建標誌將模塊安裝到odm分區:

  • device_specific: trueAndroid.bp中為 true
  • LOCAL_ODM_MODULE := trueAndroid.mk中為真

啟用驗證啟動

要防止惡意軟件篡改odm分區,請為這些分區啟用Android 驗證啟動 (AVB) (就像您為vendorsystem分區所做的那樣)。

要啟用 AVB,請包含構建標誌BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS 。有關在動態分區上配置 AVB 的詳細信息,請參閱AVB 配置更改

將 /odm 視為另一個 /vendor 分區

為確保系統將odm分區作為vendor分區處理,請將任何硬編碼的vendor引用替換為一組面向硬件的分區(當前為odmvendor )。平台中值得注意的vendor參考位置包括動態鏈接器包管理器shell/libc