本頁面介紹運行 Android 8.0 及更高版本的裝置的目錄佈局、VNDK 規則和關聯的 sepolicy。
目錄佈局
退化目錄佈局由以下目錄組成:
-
/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 庫。
- VNDK-SP 必須是獨立的。
libRS_internal.so
在 Android 8.0 中得到特殊對待,但將在未來版本中重新檢視。 - 框架與供應商之間不能透過非 HIDL 介面進行通信,包括(但不限於)綁定器、套接字、共享記憶體、檔案等。
- 系統分區的大小必須足夠大,以包含所有符合條件的 VNDK 庫的兩個副本和不符合條件的框架共享庫的副本。
塞政策
本節所述的框架進程對應於 sepolicies 中的coredomain
,而供應商進程對應於non-coredomain
。例如, /dev/binder
只能在coredomain
中訪問, /dev/vndbinder
只能在 non- coredomain
中訪問。
類似的策略限制對系統和供應商分區上的共享庫的存取。下表列出了不同類別共享庫的存取權限:
類別 | 分割 | 可從以下位置訪問 核心域 | 可從以下位置訪問 非核心域 |
---|---|---|---|
NDK | 系統 | 是 | 是 |
LL-NDK-私人 | 系統 | 是 | 是 |
VNDK-SP/VNDK-SP-專用 | 系統 | 是 | 是 |
VNDK-SP-擴展 | 小販 | 是 | 是 |
越南國家發展局 | 系統 | 是 | 是 |
VNDK-擴展 | 小販 | 氮 | 是 |
僅限 FWK | 系統 | 是 | 氮 |
僅 FWK-RS | 系統 | 是 | 氮 |
SP-HAL | 小販 | 是 | 是 |
SP-HAL-Dep | 小販 | 是 | 是 |
僅限越南盾 | 小販 | 氮 | 是 |
LL-NDK-Private 和 VNDK-SP-Private 必須可從兩個網域訪問,因為非coredomain
將間接存取它們。同樣,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
,因為預設情況下, coredomain
無法存取vendor
分區中的任何內容。將類似以下內容的行新增至特定於供應商的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