O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

ConfigStore HAL

Android 8.0 splits a monolítica OS Android em genéricos ( system.img ) e específicos de hardware ( vendor.img e odm.img ) partições. Como resultado dessa mudança, a compilação condicional deve ser removida dos módulos instalados na partição do sistema e tais 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 do 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 desta seção detalhes da interface do HAL , de implementação de serviço , e de uso do lado do cliente , todos usando surfaceflinger como um exemplo. Para obter ajuda com classes de interface ConfigStore, consulte Adicionando classes e itens de interface .

Por que não usar as propriedades do sistema?

Consideramos o uso de 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 cordas, e APIs simplesmente analisar a cadeia em um int ou bool . Outros tipos de dados de composto (por exemplo, disposição e estrutura) deve ser codificado / descodificado pelos clientes (por exemplo, "aaa,bbb,ccc" podem ser codificados como uma série de três cordas).
  • 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. Propriedades do sistema são agrupados em prop_area unidades com um tamanho fixo de 128 KB, tudo o que é atribuído a um espaço de endereço de processo, mesmo se apenas uma única propriedade do sistema em que está sendo acessado. 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 as propriedades do sistema não terem sido projetadas para dar 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

Desenho Figura 1. 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.

Itens de configuração atualmente referenciados pela estrutura estão incluídos em um pacote HIDL versionadas ( 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 compilação deve ter diferentes políticas do SELinux, eles devem ser separados para outra interface. Isto pode exigir grande revisão de android.hardware.configstore package como as interfaces separadas já não são compatíveis com versões anteriores.