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
。