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
và /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