目錄、規則和 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 庫的兩個副本和不符合條件的框架共享庫的副本。

塞政策

本節所述的框架進程對應於 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