目錄、規則和 sepolicy

本頁面介紹了運行 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