Google is committed to advancing racial equity for Black communities. See how.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

ConfigStore HAL

O Android 8.0 divide o SO Android monolítico em partições genéricas ( system.img ) e específicas de hardware ( vendor.img e odm.img ). Como resultado dessa mudança, a compilação condicional deve ser removida dos módulos instalados na partição do sistema e esses módulos devem determinar a configuração do sistema em tempo de execução (e se comportar de maneira diferente dependendo dessa configuração).

O ConfigStore HAL fornece um conjunto de APIs para acessar itens de configuração somente leitura usados ​​para configurar a estrutura Android. Esta página descreve o design do ConfigStore HAL (e por que as propriedades do sistema não foram usadas para essa finalidade); outras páginas nesta seção detalham a interface HAL , a implementação do serviço e o uso do lado do cliente , todos usando o surfaceflinger como exemplo. Para obter ajuda com as classes de interface ConfigStore, consulte Adicionando classes e itens de interface .

Por que não usar as propriedades do sistema?

Pensamos em usar as propriedades do sistema, mas encontramos vários problemas fundamentais, incluindo:

  • Limites de comprimento em valores. As propriedades do sistema têm limites rígidos no comprimento de seus valores (92 bytes). Além disso, como esses limites foram expostos diretamente aos aplicativos Android como macros C, aumentar o comprimento pode causar problemas de compatibilidade com versões anteriores.
  • Sem suporte de tipo. Todos os valores são essencialmente strings e as APIs simplesmente analisam a string em um int ou bool . Outros tipos de dados compostos (por exemplo, array e struct) devem ser codificados / decodificados pelos clientes (por exemplo, "aaa,bbb,ccc" pode ser codificado como um array de três strings).
  • Sobrescreve. Como as propriedades do sistema somente leitura são implementadas como propriedades de gravação única, os fornecedores / ODMs que desejam substituir os valores somente leitura definidos pelo AOSP devem importar seus próprios valores somente leitura antes dos valores somente leitura definidos pelo AOSP. Isso, por sua vez, resulta em valores regraváveis ​​definidos pelo fornecedor sendo substituídos por valores definidos pelo AOSP.
  • Requisitos de espaço de endereço. As propriedades do sistema ocupam uma quantidade relativamente grande de espaço de endereço em cada processo. As propriedades do sistema são agrupadas em unidades prop_area com um tamanho fixo de 128 KB, todos os quais são alocados para um espaço de endereço de processo, mesmo se apenas uma única propriedade do sistema estiver sendo acessada. Isso pode causar problemas em dispositivos de 32 bits, onde o espaço de endereço é precioso.

Tentamos superar essas limitações sem sacrificar a compatibilidade, mas continuamos preocupados com o fato de que as propriedades do sistema não foram projetadas para oferecer suporte ao acesso a itens de configuração somente leitura. Eventualmente, decidimos que as propriedades do sistema são mais adequadas para compartilhar alguns itens atualizados dinamicamente em todo o Android em tempo real, e que existia a necessidade de um novo sistema dedicado a acessar itens de configuração somente leitura.

Design da ConfigStore HAL

O design básico é simples:

Design do Configstore HAL

Figura 1. Design do ConfigStore HAL

  • Descreva sinalizadores de construção (atualmente usados ​​para compilar condicionalmente a estrutura) em HIDL.
  • Fornecedores e OEMs fornecem SoC e valores específicos de dispositivo para sinalizadores de construção implementando o serviço HAL.
  • Modifique a estrutura para usar o serviço HAL para encontrar o valor de um item de configuração no tempo de execução.

Os itens de configuração atualmente referenciados pela estrutura estão incluídos em um pacote HIDL com versão ( android.hardware.configstore@1.0 ). Os fornecedores / OEMs fornecem valores para os itens de configuração implementando interfaces neste pacote, e a estrutura usa as interfaces quando precisa obter um valor para um item de configuração.

Considerações de segurança

Os sinalizadores de construção definidos na mesma interface são afetados pela mesma política SELinux. Se um ou mais sinalizadores de construção devem ter políticas SELinux diferentes, eles devem ser separados para outra interface . Isso pode exigir uma revisão importante do android.hardware.configstore package pois as interfaces separadas não são mais compatíveis com versões anteriores.