Thư mục, quy tắc và sepolicy

Trang này mô tả bố cục thư mục cho các thiết bị chạy Android 8.0 và các quy tắc VNDK cao hơn và sepolicy có liên quan.

Bố cục thư mục

Bố cục thư mục đã phân tích bao gồm những thành phần sau thư mục:

  • /system/lib[64] chứa tất cả các thư viện dùng chung trong khung, bao gồm LL-NDK, VNDK và các thư viện chỉ dành cho khung (bao gồm LL-NDK-Private và một số thư viện có cùng tên với đơn vị tiền tệ trong VNDK-SP).
  • /system/lib[64]/vndk-sp chứa các thư viện VNDK-SP cho HAL (Lớp trừu tượng phần cứng) cùng quy trình.
  • /vendor/lib[64] chứa các thư viện VNDK mà nhà cung cấp mở rộng (có thể là thư viện DXUA hoặc DXUX VNDK), triển khai HAL (Lớp trừu tượng phần cứng) trong cùng quy trình và nhà cung cấp khác thư viện dùng chung.
  • /vendor/lib[64]/vndk-sp có thể chứa các thư viện VNDK-SP được mở rộng bởi nhà cung cấp.

Các mô-đun nhà cung cấp tải thư viện VNDK từ /system/lib[64].

Các quy tắc VNDK

Phần này cung cấp danh sách đầy đủ các quy tắc VNDK:

  • Các quy trình khung không được tải thư viện dùng chung không phải SP-HAL từ nhà cung cấp (được thực thi nghiêm ngặt kể từ Android 8.1).
  • Các quy trình của nhà cung cấp không được tải nội dung không phải LL-NDK, không phải VNDK-SP và các thư viện không phải VNDK trong phân vùng hệ thống. (không được thực thi nghiêm ngặt trong Android O nhưng sẽ có trong bản phát hành sau này).
  • Các thư viện VNDK mà Google đã cài đặt phải là một nhóm nhỏ VNDK đủ điều kiện do Google xác định thư viện.
  • Các phần phụ thuộc bên ngoài của SP-HAL và SP-HAL-Dep phải được giới hạn ở Thư viện LL-NDK hoặc VNDK-SP do Google xác định.
    • Các phần phụ thuộc của thư viện dùng chung SP-HAL phải được hạn chế ở LL-NDK các thư viện, thư viện VNDK-SP do Google xác định, các thư viện SP-HAL khác và/hoặc thư viện chia sẻ của nhà cung cấp khác có thể được gắn nhãn là SP-HAL-Dep thư viện.
    • Thư viện chia sẻ của nhà cung cấp chỉ có thể được gắn nhãn là thư viện SP-HAL-Dep nếu không phải là thư viện AOSP (Dự án nguồn mở Android) và các phần phụ thuộc của thư viện này chỉ giới hạn ở thư viện LL-NDK, Các thư viện VNDK-SP, thư viện SP-HAL và/hoặc SP-HAL-Dep khác do Google xác định thư viện.
  • VNDK-SP phải độc lập. libRS_internal.so trở nên đặc biệt xử lý trong Android 8.0, nhưng sẽ được truy cập lại trong bản phát hành sau này.
  • Không giao tiếp giữa các nhà cung cấp khung thông qua giao diện không phải HiDL, bao gồm (nhưng không giới hạn ở) trình liên kết, ổ cắm, bộ nhớ dùng chung, tệp, v.v.
  • Kích thước của phân vùng hệ thống phải đủ lớn để chứa 2 bản sao tất cả thư viện VNDK đủ điều kiện và một bản sao của khung không đủ điều kiện được chia sẻ thư viện.

sepolicy

Các quy trình khung được mô tả trong phần này tương ứng với coredomain trong sepolicies trong khi các quy trình của nhà cung cấp tương ứng với non-coredomain Ví dụ: /dev/binder có thể là chỉ có thể truy cập trong coredomain/dev/vndbinder chỉ được truy cập ở những nơi không phải coredomain.

Các chính sách tương tự hạn chế quyền truy cập vào thư viện dùng chung trên hệ thống và phân vùng của nhà cung cấp. Bảng sau đây trình bày các quyền truy cập được chia sẻ thư viện thuộc nhiều danh mục:

Danh mục Phân vùng Có thể truy cập từ
coredomain
Có thể truy cập từ
không phải miền cốt lõi
LL-NDK Hệ thống Y Y
LL-NDK-Riêng tư Hệ thống Y Y
VNDK-SP/VNDK-SP-Riêng tư Hệ thống Y Y
VNDK-SP-Ext Nhà cung cấp Y Y
VNDK Hệ thống Y Y
VNDK-Ext Nhà cung cấp N Y
CHỈ DÀNH CHO FWK Hệ thống Y N
FWK-CHỈ-RS Hệ thống Y N
SP-HAL (Lớp trừu tượng phần cứng) Nhà cung cấp Y Y
Phần phụ thuộc SP-HAL Nhà cung cấp Y Y
CHỈ DÀNH CHO VND Nhà cung cấp N Y

LL-NDK-Private và VNDK-SP-Private phải được có thể truy cập từ cả hai miền vì không phải coredomain sẽ truy cập gián tiếp vào chúng. Tương tự, SP-HAL-Dep phải truy cập được từ coredomain vì SP-HAL dựa vào lớp này.

nhãn cùng_quá trình_hal_file

Các thư viện sau tồn tại trong phân vùng nhà cung cấp. Cho phép truy cập vào các thư viện này từ cả hai nền tảng coredomain và không phải coredomain.

  • VNDK-SP-Ext ở /vendor/lib[64]/vndk-sp
  • SP-HAL ở /vendor/lib[64] hoặc /vendor/lib[64]/hw
  • Phần phụ thuộc SP-HAL- trong /vendor/lib[64] hoặc /vendor/lib[64]/hw

Gắn nhãn rõ ràng các tệp này là same_process_hal_file vì nội dung nào đó trong phân vùng vendor theo mặc định không thể truy cập vào coredomain. Thêm các đường tương tự với phần sau đây đến tệp file_contexts của riêng nhà cung cấp.

/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