Na tej stronie opisaliśmy układ katalogu na urządzeniach z Androidem 8.0 lub nowszym, reguły VNDK oraz powiązany sepolicy.
Układ katalogu
Zdegenerowany układ katalogu składa się z tych katalogów:
/system/lib[64]
zawiera wszystkie współdzielone biblioteki platformy, w tym biblioteki LL-NDK, VNDK i tylko dla platformy (w tym LL-NDK-Private i niektóre biblioteki o tych samych nazwach co biblioteki VNDK-SP)./system/lib[64]/vndk-sp
zawiera biblioteki VNDK-SP dla interfejsów HAL w tym samym procesie./vendor/lib[64]
zawiera biblioteki VNDK rozszerzone przez dostawcę (biblioteki DXUA lub DXUX VNDK), implementacje HAL w ramach tego samego procesu oraz inne biblioteki udostępnione przez dostawcę./vendor/lib[64]/vndk-sp
może zawierać biblioteki VNDK-SP rozszerzone przez dostawcę.
Moduł dostawcy wczytuje biblioteki VNDK z /system/lib[64]
.
Reguły VNDK
W tej sekcji znajdziesz obszerną listę reguł VNDK:
- Procesy platformy nie mogą wczytywać bibliotek współdzielonych innych niż SP-HAL z partycji dostawcy (ta zasada jest ściśle egzekwowana od Androida 8.1).
- Procesy dostawcy nie mogą wczytywać z partycji systemowej bibliotek innych niż LL-NDK, VNDK-SP i VNDK. (nie jest to ściśle egzekwowane w przypadku Androida, ale będzie w przyszłej wersji).
- Zainstalowane biblioteki VNDK muszą być podzbiorem bibliotek VNDK zdefiniowanych przez Google.
- Zewnętrzne zależności bibliotek SP-HAL i SP-HAL-Dep muszą być ograniczone do bibliotek LL-NDK lub zdefiniowanych przez Google bibliotek VNDK-SP.
- Zależność biblioteki współdzielonej SP-HAL musi być ograniczona do bibliotek LL-NDK, bibliotek VNDK-SP zdefiniowanych przez Google, innych bibliotek SP-HAL lub innych bibliotek współdzielonych dostawcy, które mogą być oznaczone jako biblioteki SP-HAL-Dep.
- Biblioteka udostępniona dostawcy może być oznaczona jako biblioteka SP-HAL-Dep tylko wtedy, gdy nie jest to biblioteka AOSP i jej zależności są ograniczone do bibliotek LL-NDK, bibliotek VNDK-SP zdefiniowanych przez Google, bibliotek SP-HAL lub innych bibliotek SP-HAL-Dep.
- VNDK-SP musi być samodzielny.
libRS_internal.so
jest traktowany w specjalny sposób w Androidzie 8.0, ale zostanie ponownie przeanalizowany w przyszłej wersji. - Brak komunikacji między frameworkiem a dostawcą za pomocą interfejsów innych niż HIDL, w tym między innymi binder, sockets, shared memories, files itp.
- Rozmiar partycji systemowej musi być wystarczający, aby pomieścić 2 kopie wszystkich kwalifikujących się bibliotek VNDK oraz kopię niekwalifikujących się bibliotek współdzielonych frameworku.
sepolicy
Procesy dotyczące ram, opisane w tej sekcji, odpowiadają elementom coredomain
w sepolicies, a procesy dostawcy odpowiadają elementom non-coredomain
. Na przykład pola /dev/binder
można używać tylko w przypadku pola coredomain
, a pola /dev/vndbinder
– tylko w przypadku pól niebędących coredomain
.
Podobne zasady ograniczają dostęp do wspólnych bibliotek na partycjach systemowych i partycjach dostawcy. W tabeli poniżej przedstawiono prawa dostępu do współdzielonych bibliotek różnych kategorii:
Kategoria | Partycja | Dostępny z coredomain |
Dostępny z domeny niebędącej domeną główną |
---|---|---|---|
LL-NDK | System | Y | Y |
LL-NDK-Private | System | Y | Y |
VNDK-SP/VNDK-SP-Private | System | Y | Y |
VNDK-SP-Ext | Dostawca | Y | Y |
VNDK | System | Y | Y |
VNDK-Ext | Dostawca | N | Y |
FWK-ONLY | System | Y | N |
FWK-ONLY-RS | System | Y | N |
SP-HAL | Dostawca | Y | Y |
SP-HAL-Dep | Dostawca | Y | Y |
VND-ONLY | Dostawca | N | Y |
Ścieżki LL-NDK-Private i VNDK-SP-Private muszą być dostępne z obu domen, ponieważ użytkownicy spoza domeny coredomain
będą mieli do nich dostęp pośrednio. Podobnie plik SP-HAL-Dep musi być dostępny z poziomu pliku coredomain
, ponieważ plik SP-HAL na nim polega.
etykieta same_process_hal_file
Na partycji dostawcy znajdują się następujące biblioteki: Ustaw dostęp do tych bibliotek zarówno dla użytkowników z uprawnieniamicoredomain
, jak i bez nichcoredomain
.
- VNDK-SP-Ext w
/vendor/lib[64]/vndk-sp
- SP-HAL w
/vendor/lib[64]
lub/vendor/lib[64]/hw
- SP-HAL-Dep w
/vendor/lib[64]
lub/vendor/lib[64]/hw
Te pliki muszą być wyraźnie oznaczone jako same_process_hal_file
, ponieważ wszystko na partycji vendor
jest domyślnie niedostępne dla coredomain
. Dodaj do pliku file_contexts
odpowiednie wiersze, podobne do tych:
/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