Diretórios, regras e sepolicy

Esta página descreve o layout de diretório para dispositivos com Android 8.0 e superior, as regras do VNDK e a sepolicy associada.

Layout do diretório

O layout de diretório degerado consiste no seguinte diretórios:

  • /system/lib[64] contém todas as bibliotecas compartilhadas do framework. incluindo LL-NDK, VNDK e bibliotecas somente de framework (incluindo O LL-NDK-Private e algumas bibliotecas com os mesmos nomes da no VNDK-SP).
  • /system/lib[64]/vndk-sp contém bibliotecas VNDK-SP para HALs com o mesmo processo.
  • /vendor/lib[64] contém as bibliotecas do VNDK estendidas pelo fornecedor (ou bibliotecas DXUA ou DXUX VNDK), implementações HAL de mesmo processo e outros fornecedores bibliotecas compartilhadas.
  • /vendor/lib[64]/vndk-sp pode conter as bibliotecas VNDK-SP estendidas pelo fornecedor.

Os módulos do fornecedor carregam as bibliotecas do VNDK de /system/lib[64].

Regras do VNDK

Esta seção fornece uma lista abrangente de regras do VNDK:

  • Os processos do framework não podem carregar bibliotecas compartilhadas que não sejam SP-HAL do fornecedor (estritamente aplicadas a partir do Android 8.1).
  • Os processos do fornecedor não podem carregar elementos que não são LL-NDK, non-VNDK-SP e bibliotecas não VNDK da partição do sistema. (não é estritamente aplicado no Android O, mas será em uma versão futura).
  • As bibliotecas do VNDK instaladas precisam ser um subconjunto de VNDKs qualificados definidos pelo Google. bibliotecas.
  • As dependências externas de SP-HAL e SP-HAL-Dep devem ser restritas a Bibliotecas VNDK-SP definidas pelo Google ou LL-NDK ou VNDK-SP.
    • As dependências de uma biblioteca compartilhada SP-HAL precisam ser restritas ao LL-NDK VNDK-SP definidas pelo Google, outras bibliotecas SP-HAL e/ou outras bibliotecas compartilhadas do fornecedor que podem ser rotuladas como SP-HAL-Dep bibliotecas.
    • Uma biblioteca compartilhada de fornecedor só pode ser rotulada como SP-HAL-Dep se não é uma biblioteca AOSP e suas dependências são restritas a bibliotecas LL-NDK, Bibliotecas VNDK-SP, bibliotecas SP-HAL e/ou outras bibliotecas SP-HAL-Dep definidas pelo Google bibliotecas.
  • O VNDK-SP precisa ser independente. O libRS_internal.so fica especial tratamento no Android 8.0, mas serão revisitados em uma versão futura.
  • Nenhuma comunicação entre o fornecedor e a estrutura por meio de interfaces não HIDL, incluindo (mas não se limitando a) fichário, soquetes, memórias compartilhadas, arquivos etc.
  • O tamanho da partição do sistema precisa ser grande o suficiente para conter duas cópias de todas as bibliotecas VNDK qualificadas e uma cópia do framework não qualificado foi compartilhada bibliotecas.

sepolicy

Os processos do framework descritos nesta seção correspondem coredomain em sepolicies, enquanto os processos do fornecedor correspondem a non-coredomain. Por exemplo, /dev/binder pode ser acessado apenas em coredomain e /dev/vndbinder podem ser acessado somente em ambientes que não são coredomain.

Políticas semelhantes restringem o acesso às bibliotecas compartilhadas no sistema e em partições de fornecedor. A tabela a seguir mostra os direitos de acesso bibliotecas de diferentes categorias:

Categoria Partição Acessível de
coredomain
Acessível de
não domínio principal
LL-NDK Sistema Y Y
LL-NDK-Private Sistema Y Y
VNDK-SP/VNDK-SP-Private Sistema Y Y
VNDK-SP-Ext Fornecedor Y Y
VNDK Sistema Y Y
VNDK-Ext Fornecedor N Y
SOMENTE FWK Sistema Y N
FWK-ONLY-RS Sistema Y N
HAL Fornecedor Y Y
SP-HAL-Dep Fornecedor Y Y
SOMENTE VND Fornecedor N Y

O LL-NDK-Private e o VNDK-SP-Private precisam ser acessíveis em ambos os domínios porque os clientes que não são coredomain não vão acessá-los indiretamente. Da mesma forma, o SP-HAL-Dep deve estar acessível coredomain porque a SP-HAL depende dele.

identificador same_process_hal_file

As seguintes bibliotecas existem na partição do fornecedor. Torne essas bibliotecas acessíveis coredomain e não coredomain.

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

Identifique explicitamente esses arquivos como same_process_hal_file, porque tudo na partição vendor, por padrão, não é acessível para coredomain. Adicione linhas semelhantes a o seguinte ao arquivo file_contexts específico do fornecedor.

/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