Directorios, reglas y política

Esta página describe el diseño del directorio para dispositivos que ejecutan Android 8.0 y superior, las reglas de VNDK y la política asociada.

Diseño del directorio

El diseño de directorio degenerado consta de los siguientes directorios:

  • /system/lib[64] contiene todas las bibliotecas compartidas del marco, incluidas LL-NDK, VNDK y bibliotecas exclusivas del marco (incluidas LL-NDK-Private y algunas bibliotecas con los mismos nombres que las de VNDK-SP).
  • /system/lib[64]/vndk-sp contiene bibliotecas VNDK-SP para HAL del mismo proceso.
  • /vendor/lib[64] contiene las bibliotecas VNDK extendidas por el proveedor (bibliotecas DXUA o DXUX VNDK), implementaciones HAL en el mismo proceso y otras bibliotecas compartidas por el proveedor.
  • /vendor/lib[64]/vndk-sp puede contener las bibliotecas VNDK-SP extendidas por el proveedor.

Los módulos del proveedor cargan las bibliotecas VNDK desde /system/lib[64] .

reglas VNDK

Esta sección proporciona una lista completa de reglas VNDK:

  • Los procesos del marco no deben cargar bibliotecas compartidas que no sean SP-HAL desde particiones de proveedores (estrictamente aplicado a partir de Android 8.1).
  • Los procesos del proveedor no deben cargar bibliotecas que no sean LL-NDK, que no sean VNDK-SP y que no sean VNDK desde la partición del sistema. (no se aplica estrictamente en Android O, pero sí en una versión futura).
  • Las bibliotecas VNDK instaladas deben ser un subconjunto de bibliotecas VNDK elegibles definidas por Google.
  • Las dependencias externas de SP-HAL y SP-HAL-Dep deben restringirse a bibliotecas LL-NDK o VNDK-SP definidas por Google.
    • Las dependencias de una biblioteca compartida SP-HAL deben restringirse a bibliotecas LL-NDK, bibliotecas VNDK-SP definidas por Google, otras bibliotecas SP-HAL y/u otras bibliotecas compartidas de proveedores que pueden etiquetarse como bibliotecas SP-HAL-Dep. .
    • Una biblioteca compartida de proveedor puede etiquetarse como biblioteca SP-HAL-Dep solo si no es una biblioteca AOSP y sus dependencias están restringidas a bibliotecas LL-NDK, bibliotecas VNDK-SP definidas por Google, bibliotecas SP-HAL y/o otras bibliotecas SP-HAL-Dep.
  • VNDK-SP debe ser autónomo. libRS_internal.so recibe un tratamiento especial en Android 8.0, pero se revisará en una versión futura.
  • No hay comunicación entre el marco y el proveedor a través de interfaces que no sean HIDL, incluidos (entre otros) carpetas, sockets, memorias compartidas, archivos, etc.
  • El tamaño de la partición del sistema debe ser lo suficientemente grande como para contener dos copias de todas las bibliotecas VNDK elegibles y una copia de las bibliotecas compartidas del marco no elegibles.

sepolítica

Los procesos marco descritos en esta sección corresponden al coredomain en sepolicies, mientras que los procesos del proveedor corresponden al non-coredomain . Por ejemplo, solo se puede acceder /dev/binder en coredomain y /dev/vndbinder solo en el coredomain .

Políticas similares restringen el acceso a las bibliotecas compartidas en las particiones del sistema y del proveedor. La siguiente tabla muestra los derechos de acceso a bibliotecas compartidas de diferentes categorías:

Categoría Dividir Accesible desde
dominio central
Accesible desde
dominio no central
LL-NDK Sistema Y Y
LL-NDK-Privado Sistema Y Y
VNDK-SP/VNDK-SP-Privado Sistema Y Y
VNDK-SP-Ext. Proveedor Y Y
VNDK Sistema Y Y
VNDK-Ext Proveedor norte Y
SOLO FWK Sistema Y norte
FWK-SOLO-RS Sistema Y norte
SP-HAL Proveedor Y Y
SP-HAL-Dep Proveedor Y Y
SOLO VND Proveedor norte Y

Se debe poder acceder a LL-NDK-Private y VNDK-SP-Private desde ambos dominios porque el dominio no coredomain accederá a ellos indirectamente. De manera similar, se debe poder acceder a SP-HAL-Dep desde coredomain porque SP-HAL depende de él.

etiqueta same_process_hal_file

Las siguientes bibliotecas existen en la partición del proveedor. Haga que estas bibliotecas sean accesibles tanto desde coredomain como desde el coredomain .

  • VNDK-SP-Ext en /vendor/lib[64]/vndk-sp
  • SP-HAL en /vendor/lib[64] o /vendor/lib[64]/hw
  • SP-HAL-Dep en /vendor/lib[64] o /vendor/lib[64]/hw

Etiquete explícitamente estos archivos como same_process_hal_file , porque de forma predeterminada no se puede acceder a nada en la partición vendor para coredomain . Agregue líneas similares a las siguientes al archivo file_contexts específico del proveedor.

/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