Katalogi, reguły i sepolicy

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