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]
哈爾/odm/lib[64]/hw
SE政策/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
  • 用於 ODM 映像的BOARD_ODMIMAGE_FILE_SYSTEM_TYPE檔案系統類型
  • /odm/build.propPRODUCT_ODM_PROPERTIES$(call inherit-product path/to/device.mk)中使用,如PRODUCT_ODM_PROPERTIES += product.abc=ok

將模組安裝到 ODM 分割區

使用這些建置標誌將模組安裝到odm分割區:

  • device_specific: true Android.bp中為 true
  • Android.mk中的LOCAL_ODM_MODULE := true

啟用驗證啟動

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

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

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

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