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