Thư mục, Quy tắc và riêng biệt

Trang này mô tả bố cục thư mục cho các thiết bị chạy Android 8.0 trở lên, các quy tắc VNĐK và chính sách riêng biệt liên quan.

Bố cục thư mục

Bố cục thư mục thoái hóa bao gồm các thư mục sau:

  • /system/lib[64] chứa tất cả các thư viện framework chia sẻ, bao gồm LL-NDK, VNDK và các thư viện chỉ dành cho framework (bao gồm LL-NDK-Private và một số thư viện có cùng tên với thư viện trong VNDK-SP).
  • /system/lib[64]/vndk-sp chứa các thư viện VNDK-SP cho các HAL cùng tiến trình.
  • /vendor/lib[64] chứa các thư viện VNĐK được nhà cung cấp mở rộng (thư viện DXUA hoặc DXUX VNĐK), triển khai HAL cùng quy trình và các thư viện chia sẻ khác của nhà cung cấp.
  • /vendor/lib[64]/vndk-sp có thể chứa các thư viện VNĐK-SP do nhà cung cấp mở rộng.

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

quy định của VNĐK

Phần này cung cấp danh sách đầy đủ các quy tắc của VNĐK:

  • Các quy trình khung không được tải các thư viện chia sẻ không phải SP-HAL từ các phân vùng của nhà cung cấp (được thực thi nghiêm ngặt bắt đầu từ Android 8.1).
  • Các quy trình của nhà cung cấp không được tải các thư viện không phải LL-NDK, không phải VNĐK-SP và không phải VNĐK từ 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 trong tương lai).
  • Các thư viện VNĐK đã cài đặt phải là tập hợp con của các thư viện VNĐK đủ điều kiện do Google xác định.
  • 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 ở các thư viện LL-NDK hoặc VNĐK-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 giới hạn ở các thư viện LL-NDK, thư viện VNĐK-SP do Google xác định, các thư viện SP-HAL khác và/hoặc các thư viện dùng chung của nhà cung cấp khác có thể được gắn nhãn là thư viện SP-HAL-Dep .
    • Thư viện dùng chung 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 và các phần phụ thuộc của nó bị giới hạn ở thư viện LL-NDK, thư viện VNĐK-SP do Google xác định, thư viện SP-HAL và/hoặc các thư viện SP-HAL-Dep khác.
  • VNĐK-SP phải khép kín. libRS_internal.so được xử lý đặc biệt trong Android 8.0 nhưng sẽ được xem xét lại trong bản phát hành trong tương lai.
  • Không có giao tiếp giữa nhà cung cấp khung thông qua các giao diện không phải HIDL, bao gồm (nhưng không giới hạn) chất kết dính, ổ 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 hai bản sao của tất cả các thư viện VNĐK đủ điều kiện và một bản sao của các thư viện chia sẻ khung không đủ điều kiện.

chính sách riêng biệt

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

Các chính sách tương tự hạn chế quyền truy cập vào các thư viện dùng chung trên các phân vùng hệ thống và nhà cung cấp. Bảng sau đây hiển thị các quyền truy cập các thư viện dùng chung thuộc các danh mục khác nhau:

Loại Vách ngăn Có thể truy cập từ
tên miền lõi
Có thể truy cập từ
không phải tên miền lõi
LL-NDK Hệ thống Y Y
LL-NDK-Riêng tư Hệ thống Y Y
VNĐK-SP/ VNĐK-SP-Private Hệ thống Y Y
VNĐK-SP-Ext Người bán Y Y
VNĐK Hệ thống Y Y
VNĐK-Ext Người bán N Y
CHỈ FWK Hệ thống Y N
FWK-CHỈ-RS Hệ thống Y N
SP-HAL Người bán Y Y
SP-HAL-Dep Người bán Y Y
CHỈ VNĐ Người bán N Y

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

nhãn same_process_hal_file

Các thư viện sau tồn tại trong phân vùng của nhà cung cấp. Làm cho các thư viện này có thể truy cập được từ cả coredomain và miền không phải coredomain .

  • VNĐK-SP-Ext trong /vendor/lib[64]/vndk-sp
  • SP-HAL trong /vendor/lib[64] hoặc /vendor/lib[64]/hw
  • SP-HAL-Dep trong /vendor/lib[64] hoặc /vendor/lib[64]/hw

Gắn nhãn rõ ràng cho các tệp này là same_process_hal_file , vì mọi thứ trong phân vùng vendor theo mặc định đều không thể truy cập được đối với coredomain . Thêm các dòng tương tự như sau vào tệp file_contexts dành riêng cho 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