本頁說明搭載 Android 8.0 以上版本的裝置、VNDK 規則和相關 sepolicy 的目錄版面配置。
目錄版面配置
Degenerated Directory Layout 包含下列目錄:
/system/lib[64]包含所有架構共用程式庫,包括 LL-NDK、VNDK 和僅限架構的程式庫 (包括 LL-NDK-Private 和部分名稱與 VNDK-SP 相同的程式庫)。/system/lib[64]/vndk-sp包含同一個程序 HAL 的 VNDK-SP 程式庫。/vendor/lib[64]包含供應商擴充的 VNDK 程式庫 (DXUA 或 DXUX VNDK 程式庫)、相同程序 HAL 實作項目,以及其他供應商共用程式庫。/vendor/lib[64]/vndk-sp可能包含供應商擴充的 VNDK-SP 程式庫。
供應商模組會從 /system/lib[64] 載入 VNDK 程式庫。
VNDK 規則
本節提供完整的 VNDK 規則清單:
- 架構程序不得從供應商分區載入非 SP-HAL 共用程式庫 (從 Android 8.1 開始嚴格執行)。
- 供應商程序不得從系統分區載入非 LL-NDK、非 VNDK-SP 和非 VNDK 程式庫。(在 Android O 中並未嚴格執行,但日後的版本會執行)。
- 已安裝的 VNDK 程式庫必須是 Google 定義的適用 VNDK 程式庫的子集。
- SP-HAL 和 SP-HAL-Dep 的外部相依項目必須限制為 LL-NDK 或 Google 定義的 VNDK-SP 程式庫。
- SP-HAL 共用程式庫的依附元件必須限制為 LL-NDK 程式庫、Google 定義的 VNDK-SP 程式庫、其他 SP-HAL 程式庫,以及/或可標示為 SP-HAL-Dep 程式庫的其他廠商共用程式庫。
- 供應商共用程式庫只有在非 AOSP 程式庫,且其依附元件僅限於 LL-NDK 程式庫、Google 定義的 VNDK-SP 程式庫、SP-HAL 程式庫和/或其他 SP-HAL-Dep 程式庫時,才能標示為 SP-HAL-Dep 程式庫。
- VNDK-SP 必須是自給自足的。
libRS_internal.so會在 Android 8.0 中獲得特殊處理,但我們會在日後的版本中重新審查。 - 不得透過非 HIDL 介面進行架構供應商通訊,包括但不限於 Binder、Socket、共用記憶體、檔案等。
- 系統分區的大小必須足以容納所有符合資格的 VNDK 程式庫副本和不符合資格的架構共用程式庫副本各兩份。
sepolicy
本節所述的架構程序與 sepolicies 中的 coredomain 相符,而供應商程序則與 non-coredomain 相符。舉例來說,/dev/binder 只能在 coredomain 中存取,而 /dev/vndbinder 只能在非 coredomain 中存取。
類似的政策會限制系統和供應商分區的共用程式庫存取權。下表列出不同類別共用程式庫的存取權:
| 類別 | 分區 | 可從 coredomain 存取 |
可從 非核心網域存取 |
|---|---|---|---|
| LL-NDK | 系統 | 是 | 是 |
| LL-NDK-Private | 系統 | 是 | 是 |
| VNDK-SP/VNDK-SP-Private | 系統 | 是 | 是 |
| VNDK-SP-Ext | 供應商 | 是 | 是 |
| VNDK | 系統 | 是 | 是 |
| VNDK-Ext | 供應商 | 否 | 是 |
| FWK 專用 | 系統 | 是 | 否 |
| FWK-ONLY-RS | 系統 | 是 | 否 |
| SP-HAL | 供應商 | 是 | 是 |
| SP-HAL-Dep | 供應商 | 是 | 是 |
| VND-ONLY | 供應商 | 否 | 是 |
coredomain 會間接存取 LL-NDK-Private 和 VNDK-SP-Private,因此必須從這兩個網域存取。同樣地,SP-HAL-Dep 必須可從 coredomain 存取,因為 SP-HAL 會依賴它。
same_process_hal_file 標籤
以下程式庫位於供應商分區。讓這些程式庫可從 coredomain 和非 coredomain 存取。
/vendor/lib[64]/vndk-sp中的 VNDK-SP-Ext/vendor/lib[64]或/vendor/lib[64]/hw中的 SP-HAL/vendor/lib[64]或/vendor/lib[64]/hw中的 SP-HAL-Dep
請明確將這些檔案標示為 same_process_hal_file,因為根據預設,vendor 分區中的任何內容都無法由 coredomain 存取。在特定供應商的 file_contexts 檔案中加入類似下列的內容。
/vendor/lib(64)?/hw/libMySpHal\.so u:object_r:same_process_hal_file:s0 /vendor/lib(64)?/vndk-sp/libBase\.so u:object_r:same_process_hal_file:s0 /vendor/lib(64)?/libBaseInternal\.so u:object_r:same_process_hal_file:s0