Questa pagina descrive il layout della directory per i dispositivi con Android 8.0 e versioni successive, le regole VNDK e il file sepolicy associato.
Layout della directory
Il layout degenere della directory è costituito dalle seguenti directory:
/system/lib[64]
contiene tutte le librerie condivise del framework, tra cui LL-NDK, VNDK e librerie solo per il framework (tra cui LL-NDK-Private e alcune librerie con gli stessi nomi di quelle in VNDK-SP)./system/lib[64]/vndk-sp
contiene librerie VNDK-SP per HAL nello stesso processo./vendor/lib[64]
contiene le librerie VNDK estese dal fornitore (librerie VNDK DXUA o DXUX), le implementazioni HAL nello stesso processo e altre librerie condivise del fornitore./vendor/lib[64]/vndk-sp
potrebbe contenere le librerie VNDK-SP estese dal fornitore.
I moduli del fornitore caricano le librerie VNDK da /system/lib[64]
.
Regole VNDK
Questa sezione fornisce un elenco completo delle regole VNDK:
- I processi del framework non devono caricare librerie condivise non SP-HAL dalle partizioni del fornitore (disposizione applicata rigorosamente a partire da Android 8.1).
- I processi del fornitore non devono caricare librerie non LL-NDK, non VNDK-SP e non VNDK dalla partizione di sistema. (non applicata rigorosamente in Android O, ma lo sarà in una release futura).
- Le librerie VNDK installate devono essere un sottoinsieme di librerie VNDK idonee definite da Google.
- Le dipendenze esterne di SP-HAL e SP-HAL-Dep devono essere limitate alle librerie VNDK-SP o LL-NDK definite da Google.
- Le dipendenze di una libreria condivisa SP-HAL devono essere limitate alle librerie LL-NDK, alle librerie VNDK-SP definite da Google, ad altre librerie SP-HAL e/o ad altre librerie condivise del fornitore che possono essere etichettate come librerie SP-HAL-Dep.
- Una libreria condivisa del fornitore può essere etichettata come libreria SP-HAL-Dep solo se non è una libreria AOSP e le sue dipendenze sono limitate alle librerie LL-NDK, alle librerie VNDK-SP definite da Google, alle librerie SP-HAL e/o ad altre librerie SP-HAL-Dep.
- VNDK-SP deve essere autonomo.
libRS_internal.so
riceve un trattamento speciale in Android 8.0, ma verrà rivisto in una release futura. - Nessuna comunicazione tra il framework e il fornitore tramite interfacce non HIDL, inclusi, a titolo esemplificativo, binder, socket, memorie condivise, file e così via.
- La dimensione della partizione di sistema deve essere sufficientemente grande da contenere due copie di tutte le librerie VNDK idonee e una copia delle librerie condivise del framework non idonee.
sepolicy
I processi del framework descritti in questa sezione corrispondono a
coredomain
in sepolicies, mentre i processi del fornitore corrispondono a
non-coredomain
. Ad esempio, è possibile accedere a /dev/binder
solo in coredomain
e a /dev/vndbinder
solo in non-coredomain
.
Criteri simili limitano l'accesso alle librerie condivise nelle partizioni di sistema e del fornitore. La seguente tabella mostra i diritti di accesso alle librerie condivise di diverse categorie:
Categoria | Partizione | Accessibile da coredomain |
Accessibile da non-coredomain |
---|---|---|---|
LL-NDK | Sistema | Y | Y |
LL-NDK-Private | Sistema | Y | Y |
VNDK-SP/VNDK-SP-Private | Sistema | Y | Y |
VNDK-SP-Ext | Fornitore | Y | Y |
VNDK | Sistema | Y | Y |
VNDK-Ext | Fornitore | N | Y |
SOLO FWK | Sistema | Y | N |
FWK-ONLY-RS | Sistema | Y | N |
SP-HAL | Fornitore | Y | Y |
SP-HAL-Dep | Fornitore | Y | Y |
SOLO VND | Fornitore | N | Y |
LL-NDK-Private e VNDK-SP-Private devono essere accessibili da entrambi i domini perché non-coredomain
vi accederà indirettamente. Analogamente, SP-HAL-Dep deve essere accessibile dacoredomain
perché SP-HAL si basa su questo.
Etichetta same_process_hal_file
Nella partizione del fornitore sono presenti le seguenti librerie. Rendi queste librerie accessibili sia da coredomain
sia da non coredomain
.
- VNDK-SP-Ext in
/vendor/lib[64]/vndk-sp
- SP-HAL in
/vendor/lib[64]
o/vendor/lib[64]/hw
- SP-HAL-Dep in
/vendor/lib[64]
o/vendor/lib[64]/hw
Etichetta esplicitamente questi file come same_process_hal_file
, perché per impostazione predefinita qualsiasi elemento nella partizione vendor
non è accessibile a coredomain
. Aggiungi righe simili alle seguenti al file file_contexts
specifico del fornitore.
/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