Design de snapshot do VNDK

Os snapshots do VNDK podem ser usados por uma imagem do sistema para fornecer o VNDK correto. bibliotecas a imagens do fornecedor, mesmo quando as imagens do sistema e do fornecedor são criadas diferentes versões do Android. A criação de um snapshot do VNDK requer a captura Bibliotecas VNDK como um snapshot e a marcação de um número de versão. A a imagem do fornecedor pode ser vinculada a uma versão específica do VNDK que fornece as ABIs necessárias. dos módulos na imagem do fornecedor. No entanto, na mesma versão do VNDK, as bibliotecas do VNDK precisam ser ABI-stable.

O design de snapshots do VNDK inclui métodos para gerando a pré-builds de um instantâneo do VNDK com base na imagem atual do sistema e instalação essas bibliotecas pré-criadas para a partição do sistema de uma versão mais recente do Android.

Sobre as bibliotecas VNDK

HIDL-HALs, introduzidos em O Android 8.0 permite upgrades separados para partições do sistema e do fornecedor. VNDK define conjuntos de bibliotecas (VNDK-core, VNDK-SP e LL-NDK) que o código do fornecedor pode vinculam-se e impede que os fornecedores usem bibliotecas que não estão em um VNDK definido. Como resultado, a imagem do fornecedor pode ser criada e executada se o VNDK adequado na imagem do sistema são fornecidos à imagem do fornecedor.

VNDK-core

O conjunto de bibliotecas do VNDK-core está instalado /system/lib[64]/vndk-${VER} e está disponível apenas para processos do fornecedor com o nível da API igual a ${VER}. Os processos do sistema não podem usar essas bibliotecas e devem Em vez disso, use as bibliotecas instaladas em /system/lib[64]. Devido ao da restrição de namespace estrita para cada processo, as bibliotecas VNDK-core. estão protegidos contra o carregamento duplo.

Para incluir uma biblioteca no VNDK-core, adicione o seguinte a Android.bp:

vendor_available: true,
vndk: {
    enabled: true,
},

VNDK-SP

As bibliotecas VNDK-SP estão instaladas em /system/lib[64]/vndk-sp-${VER}. e estão disponíveis para os processos do fornecedor e do sistema (por meio do SP-HAL bibliotecas instaladas na partição do fornecedor). As bibliotecas VNDK-SP podem ser carregado duas vezes.

Para incluir uma biblioteca no VNDK-SP, adicione o seguinte a Android.bp:

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

LL-NDK

As bibliotecas do LL-NDK estão instaladas em /system/lib[64]. Módulos do fornecedor pode usar bibliotecas de stub do LL-NDK para acessar símbolos pré-selecionados do LL-NDK bibliotecas. As bibliotecas do LL-NDK precisam ser compatíveis com versões anteriores e estáveis ao ABI para permite que versões antigas dos módulos do fornecedor usem novas versões de bibliotecas do LL-NDK. Devido às características estáveis à ABI do LL-NDK, o snapshot do VNDK não é necessário incluir bibliotecas do LL-NDK para imagens de fornecedores antigos.

Sobre os snapshots do VNDK

O Android 8.1 inclui VNDK bibliotecas criadas usando o código-fonte. No entanto, para versões posteriores Android, cada versão do VNDK precisa ser capturada como um snapshot e fornecida como um pré-criada para permitir a vinculação a uma imagem de fornecedor mais antiga.

A partir do Android 9, as novas versões do Android inclua pelo menos um snapshot dos diretórios VNDK-core e VNDK-SP para versões mais antigas. no código-fonte do Android. No tempo de build, os snapshots necessários instalado em /system/lib[64]/vndk-${VER} e /system/lib[64]/vndk-sp-${VER} (diretórios que podem ser usados por a partição do fornecedor), em que ${VER} é a variável de string que representa o nome da versão do snapshot do VNDK.

Como as bibliotecas de snapshots do VNDK podem ser diferentes para cada versão do VNDK, o VNDK pode também inclui as configurações de namespace do vinculador, instaladas como etc/ld.config.${VER}.txt, /etc/llndk.libraries.${VER}.txt e /etc/vndksp.libraries.${VER}.txt

Exemplo: fazer upgrade do sistema e do fornecedor imagens

Nenhum snapshot necessário. build sem configurações extras para o VNDK snapshots.

Exemplo: fazer upgrade apenas da imagem do sistema

É necessário incluir os arquivos de configuração de snapshot do VNDK e de namespace do vinculador para a imagem do fornecedor na imagem do sistema. Os arquivos de configuração de namespace do vinculador são configurados automaticamente para pesquisar bibliotecas VNDK em /system/lib[64]/vndk-${VER} e /system/lib[64]/vndk-sp-${VER}.

Figura 1. Fazer upgrade apenas do sistema

Exemplo: upgrade da imagem do sistema, pequena mudança na imagem do fornecedor

Ainda não é possível criar uma imagem de fornecedor com base em um snapshot do VNDK, portanto você precisa criar a imagem do fornecedor separadamente com o código-fonte original e, em seguida, atualizar a imagem do sistema conforme descrito no exemplo anterior.

Arquitetura de snapshots do VNDK

Para tornar uma imagem do sistema Android 9 compatível com um Imagem do fornecedor do Android 8.1, o snapshot do VNDK que corresponde ao Android 8.1 a imagem do fornecedor precisa ser fornecida com o Android 9 imagem do sistema, conforme mostrado abaixo:

Figura 2. Arquitetura de snapshots do VNDK

O design de snapshots do VNDK inclui os seguintes métodos:

  • Como gerar um snapshot para o VNDK-core e o VNDK-SP bibliotecas. O Android 9 inclui um script que você pode usar para fazer um snapshot do build atual do VNDK. Este script agrupa tudo bibliotecas em /system/lib[64]/vndk-28 e /system/lib[64]/vndk-sp-28 que foram criados com a versão atual origem como um snapshot do VNDK, em que 28 é a versão do VNDK do Android 9. O resumo também inclui o vinculador os arquivos de configuração do namespace /etc/ld.config.28.txt, /etc/llndk.libraries.28.txt e /etc/vndksp.libraries.28.txt O snapshot gerado vai ser usado com versões mais recentes do Android (mais recentes que o Android 9).
  • A instalação de bibliotecas VNDK-core e VNDK-SP pré-criadas de um snapshot. No Android 9, um snapshot de VNDK tem um conjunto de bibliotecas VNDK-core pré-criadas e um conjunto de bibliotecas VNDK-SP, bem como como arquivos de configuração de namespace do vinculador. Ao fornecer uma lista de VNDK versões do snapshot a serem instaladas, no tempo de build, a imagem do sistema é instalada as bibliotecas de snapshots do VNDK para /system/lib[64]/vndk-${VER} e os diretórios /system/lib[64]/vndk-sp-${VER} e o vinculador os arquivos de configuração do namespace para os snapshots do VNDK para /etc.

Controle de versão do VNDK

Cada versão do Android tem apenas um snapshot de VNDK, e a versão do SDK é usada como uma versão do VNDK, o que significa que a versão do VNDK tem um número inteiro, como 27 para Android 8.1). A versão do VNDK é corrigida quando a versão do Android é lançado. A versão do VNDK usada pela partição do fornecedor é armazenada automaticamente na propriedade ro.vndk.version, que pode ser lida no ambiente de execução. Essa versão é usada para identificar a versão do VNDK do fornecedor para algumas bibliotecas e identificar a versão do snapshot do VNDK para o namespace configuração do Terraform.

Criar bibliotecas VNDK

O comando make vndk cria bibliotecas que têm vndk: { enabled: true, … }, incluindo dependências e namespace de configuração do Terraform. Se BOARD_VNDK_VERSION := current estiver definido, Essas bibliotecas são criadas com o comando make.

Como essa compilação não instala as bibliotecas VNDK do snapshot, o As bibliotecas VNDK instaladas não são estáveis para ABI. No entanto, quando uma versão do Android for lançado, a ABI da versão atual do VNDK será corrigida. Neste ponto, A falha de ABI é um erro de build, portanto, os patches para a versão do Android não podem mudar a ABI das bibliotecas do VNDK.