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-spzawiera 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-spmoż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.sojest 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