本頁面介紹了運行 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 庫的兩個副本和一個不符合條件的框架共享庫的副本。
政策
本節中描述的框架進程對應於coredomain
中的 coredomain ,而供應商進程對應於non-coredomain
。例如, /dev/binder
只能在coredomain
中訪問, /dev/vndbinder
只能在非coredomain
中訪問。
類似的策略限制對系統和供應商分區上的共享庫的訪問。下表顯示了訪問不同類別的共享庫的權限:
類別 | 分割 | 可從 核心域 | 可從 非核心域 |
---|---|---|---|
LL-NDK | 系統 | 是 | 是 |
LL-NDK-私人 | 系統 | 是 | 是 |
VNDK-SP/VNDK-SP-私人 | 系統 | 是 | 是 |
VNDK-SP-分機 | 小販 | 是 | 是 |
越南盾 | 系統 | 是 | 是 |
VNDK-分機 | 小販 | ñ | 是 |
僅限 FWK | 系統 | 是 | ñ |
FWK-ONLY-RS | 系統 | 是 | ñ |
SP-HAL | 小販 | 是 | 是 |
SP-HAL-Dep | 小販 | 是 | 是 |
僅限越南盾 | 小販 | ñ | 是 |
LL-NDK-Private 和coredomain
-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 - SP-HAL-Dep 在
/vendor/lib[64]
或/vendor/lib[64]/hw
將這些文件顯式標記為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