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) 穩定性時,請牢記以下架構。

-
odm和vendor分區之間沒有 ABI 穩定性。兩個分區必須同時升級。 -
odm和vendor分區可以相互依賴,但vendor分區必須在沒有odm分區的情況下工作。 -
odm與system之間的 ABI 與vendor與system之間的 ABI 相同。
product分區與vendor或odm分區之間不允許直接交互。 (這是由 SEpolicy 強制執行的。)
實現 ODM 分區
在實施新分區之前,請查看相關的 AOSP 更改。
設置 ODM 分區
要設置odm分區,請包含以下構建標誌:
-
BOARD_ODMIMAGE_PARTITION_SIZE用於固定分區大小 PRODUCT_USE_DYNAMIC_PARTITIONS和BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE用於動態分區大小BOARD_ODMIMAGE_FILE_SYSTEM_TYPE用於 ODM 映像的文件系統類型/odm/build.prop的PRODUCT_ODM_PROPERTIES用於$(call inherit-product path/to/device.mk),如PRODUCT_ODM_PROPERTIES += product.abc=ok
將模塊安裝到 ODM 分區
使用這些構建標誌將模塊安裝到odm分區:
-
device_specific: true在Android.bp中為 true -
LOCAL_ODM_MODULE := true在Android.mk中為真
啟用驗證啟動
要防止惡意軟件篡改odm分區,請為這些分區啟用Android 驗證啟動 (AVB) (就像您為vendor和system分區所做的那樣)。
要啟用 AVB,請包含構建標誌BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS 。有關在動態分區上配置 AVB 的詳細信息,請參閱AVB 配置更改。
將 /odm 視為另一個 /vendor 分區
為確保系統將odm分區作為vendor分區處理,請將任何硬編碼的vendor引用替換為一組面向硬件的分區(當前為odm和vendor )。平台中值得注意的vendor參考位置包括動態鏈接器、包管理器和shell/libc 。