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) 穩定性時,請記住以下架構。
-
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
- 用於 ODM 映像的
BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
檔案系統類型 /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 -
Android.mk
中的LOCAL_ODM_MODULE := true
啟用驗證啟動
為了防止惡意軟體篡改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
。