Na tej stronie opisano układ katalogów dla urządzeń z systemem Android 8.0 i nowszym, reguły VNDK i powiązane zasady sepolice.
Układ katalogu
Zdegenerowany układ katalogów składa się z następujących katalogów:
-
/system/lib[64]
zawiera wszystkie biblioteki współdzielone frameworka, w tym LL-NDK, VNDK i biblioteki tylko frameworku (w tym LL-NDK-Private i niektóre biblioteki o takich samych nazwach jak te w VNDK-SP). -
/system/lib[64]/vndk-sp
zawiera biblioteki VNDK-SP dla warstw HAL tego samego procesu. -
/vendor/lib[64]
zawiera biblioteki VNDK rozszerzone przez dostawcę (biblioteki DXUA lub DXUX VNDK), implementacje HAL tego samego procesu i biblioteki współdzielone innych dostawców. -
/vendor/lib[64]/vndk-sp
może zawierać biblioteki VNDK-SP rozszerzone przez dostawcę.
Moduły dostawcy ładują biblioteki VNDK z /system/lib[64]
.
Regulamin VNDK
W tej sekcji znajduje się obszerna lista zasad VNDK:
- Procesy ramowe nie mogą ładować bibliotek współdzielonych innych niż SP-HAL z partycji dostawcy (ściśle egzekwowane, począwszy od systemu Android 8.1).
- Procesy dostawcy nie mogą ładować bibliotek innych niż LL-NDK, innych niż VNDK-SP i innych niż VNDK z partycji systemowej. (nie jest to ściśle egzekwowane w systemie Android O, ale będzie w przyszłej wersji).
- Zainstalowane biblioteki VNDK muszą stanowić podzbiór kwalifikujących się bibliotek VNDK zdefiniowanych przez Google.
- Zewnętrzne zależności SP-HAL i SP-HAL-Dep muszą być ograniczone do bibliotek LL-NDK lub zdefiniowanych przez Google bibliotek VNDK-SP.
- Zależności biblioteki współdzielonej SP-HAL muszą być ograniczone do bibliotek LL-NDK, bibliotek VNDK-SP zdefiniowanych przez Google, innych bibliotek SP-HAL i/lub bibliotek współdzielonych innych dostawców, które można oznaczyć jako biblioteki SP-HAL-Dep .
- Bibliotekę współdzieloną dostawcy można oznaczyć jako bibliotekę SP-HAL-Dep tylko wtedy, gdy nie jest to biblioteka AOSP, a jej zależności są ograniczone do bibliotek LL-NDK, bibliotek VNDK-SP zdefiniowanych przez Google, bibliotek SP-HAL i/lub inne biblioteki SP-HAL-Dep.
- VNDK-SP musi być samodzielny.
libRS_internal.so
jest traktowana w systemie Android 8.0 w specjalny sposób, ale zostanie ponownie omówiona w przyszłej wersji. - Brak komunikacji między dostawcą frameworka poprzez interfejsy inne niż HIDL, w tym (ale nie wyłącznie) segregatory, gniazda, współdzielone pamięci, pliki itp.
- Rozmiar partycji systemowej musi być wystarczająco duży, aby pomieścić dwie kopie wszystkich kwalifikujących się bibliotek VNDK i kopię niekwalifikujących się bibliotek współdzielonych platformy.
sepolityka
Procesy ramowe opisane w tej sekcji odpowiadają coredomain
w sepolicie, podczas gdy procesy dostawcy odpowiadają non-coredomain
. Na przykład dostęp do /dev/binder
można uzyskać tylko w coredomain
, a /dev/vndbinder
można uzyskać tylko w domenie innej niż coredomain
.
Podobne zasady ograniczają dostęp do bibliotek współdzielonych na partycjach systemowych i dostawcy. Poniższa tabela przedstawia uprawnienia dostępu do bibliotek współdzielonych różnych kategorii:
Kategoria | Przegroda | Dostępne od domena rdzeniowa | Dostępne od niebędące domeną rdzeniową |
---|---|---|---|
LL-NDK | System | Y | Y |
LL-NDK-prywatny | System | Y | Y |
VNDK-SP/VNDK-SP-prywatny | System | Y | Y |
VNDK-SP-Ext | Sprzedawca | Y | Y |
VNDK | System | Y | Y |
VNDK-Ext | Sprzedawca | N | Y |
TYLKO FWK | System | Y | N |
FWK-TYLKO-RS | System | Y | N |
SP-HAL | Sprzedawca | Y | Y |
SP-HAL-Dep | Sprzedawca | Y | Y |
TYLKO VND | Sprzedawca | N | Y |
LL-NDK-Private i VNDK-SP-Private muszą być dostępne z obu domen, ponieważ osoby spoza coredomain
będą miały do nich pośredni dostęp. Podobnie SP-HAL-Dep musi być dostępny z coredomain
, ponieważ SP-HAL na niej polega.
etykieta pliku same_process_hal_file
W partycji dostawcy znajdują się następujące biblioteki. Udostępnij te biblioteki zarówno z coredomain
, jak i spoza coredomain
.
- 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
Jawnie oznacz te pliki jako same_process_hal_file
, ponieważ wszystko na partycji vendor
jest domyślnie niedostępne dla coredomain
. Dodaj linie podobne do poniższych do pliku file_contexts
specyficznego dla dostawcy.
/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