Partições ODM

O Android 10 inclui suporte para construção de partições odm usando o sistema de compilação Android.

Sobre partições ODM

Os fabricantes de design original (ODMs) personalizam pacotes de suporte de placa (BSPs) do fornecedor de sistema no chip (SoC) para seus dispositivos específicos (suas placas). Isso permite que eles implementem módulos de kernel para componentes específicos da placa, daemons específicos da placa ou seus próprios recursos em camadas de abstração de hardware (HALs). Eles também podem querer substituir ou personalizar componentes do SoC.

Nas versões anteriores do Android, essas personalizações impediam o uso de uma imagem de fornecedor único para dispositivos com o mesmo SoC (ou com SoCs diferentes, mas da mesma família). No Android 10 e versões posteriores, você pode usar uma partição odm separada para personalizações, o que permite usar uma única imagem de fornecedor para vários SKUs de hardware.

Usando partições de produto e ODM

O Android 9 adicionou suporte para a construção de partições product , permitindo o uso de uma única imagem do sistema para vários SKUs de software fornecidos por diferentes imagens product.img . Embora a partição product seja destinada a SKUs de software, a partição odm é destinada a SKUs de hardware.

Com partições dedicadas de produto e ODM, você pode usar a partição system para hospedar código genérico para compartilhamento entre vários SKUs de software e a partição vendor para hospedar código BSP específico do SoC para compartilhar entre vários dispositivos com base no SoC fornecido.

O uso de partições separadas tem desvantagens, como a dificuldade em gerenciar o espaço em disco (por exemplo, você deve reservar uma quantidade limitada de espaço para crescimento futuro). No entanto, o suporte do Android 10 para partições dinâmicas elimina o problema do disco e torna possível o reparticionamento de um dispositivo durante uma atualização over-the-air (OTA) .

Componentes ODM

A partição odm contém os seguintes componentes específicos do ODM (semelhantes à partição vendor ), listados na tabela a seguir.

Componente específico do ODM Localização
Módulos de kernel carregáveis ​​(LKMs) /odm/lib/modules/*.ko
Bibliotecas nativas /odm/lib[64]
HALs /odm/lib[64]/hw
Política SE /odm/etc/selinux
Dados do objeto VINTF /odm/etc/vintf
Arquivos init.rc /odm/etc/init
Propriedades do sistema /odm/build.prop
Sobreposições de recursos de tempo de execução (RROs) /odm/overlay/*.apk
Aplicativos /odm/app/*.apk
Aplicativos privados /odm/priv-app/*.apk
Bibliotecas Java /odm/framework/*.jar
Configurações do sistema Android Framework /odm/etc/sysconfig/* e /odm/etc/permissions/*

Sem imagens personalizadas

Não use imagens personalizadas porque elas não oferecem suporte para o seguinte:

  • Instalação de um módulo para um destino específico. As imagens personalizadas suportam a cópia de artefatos em uma imagem, mas não podem instalar um módulo em uma partição específica especificando a partição de destino como parte de uma regra de build.
  • Em breve. custom_images não pode ser criado usando o sistema de compilação Soong.
  • Atualização OTA. Imagens personalizadas são usadas como imagens ROM de fábrica que não podem ser editadas em OTA.

Mantendo ABIs entre partições

A partição odm é uma extensão da partição do vendor . Ao considerar a estabilidade da interface binária do aplicativo (ABI), lembre-se da arquitetura a seguir.

Mantendo ABI entre partições
Figura 1. Manutenção de ABI entre partições
  • Não há estabilidade ABI entre partições odm e vendor . Ambas as partições devem ser atualizadas ao mesmo tempo.
  • As partições odm e vendor podem depender uma da outra, mas a partição vendor deve funcionar sem uma partição odm .
  • A ABI entre odm e system é a mesma que a ABI entre vendor e system .

A interação direta entre a partição product e a partição do vendor ou odm não é permitida . (Isso é aplicado pela SEpolicy.)

Implementando partições ODM

Antes de implementar uma nova partição, revise as alterações relacionadas ao AOSP .

Configurando partições ODM

Para configurar partições odm , inclua estes sinalizadores de construção:

  • BOARD_ODMIMAGE_PARTITION_SIZE para um tamanho de partição fixo
  • PRODUCT_USE_DYNAMIC_PARTITIONS e BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE para um tamanho de partição dinâmico
  • BOARD_ODMIMAGE_FILE_SYSTEM_TYPE tipo de sistema de arquivos usado para a imagem ODM
  • PRODUCT_ODM_PROPERTIES para /odm/build.prop para uso em $(call inherit-product path/to/device.mk) , como em PRODUCT_ODM_PROPERTIES += product.abc=ok

Instalando um módulo em uma partição ODM

Use estes sinalizadores de construção para instalar um módulo em uma partição odm :

  • device_specific: true em Android.bp
  • LOCAL_ODM_MODULE := true em Android.mk

Habilitando inicialização verificada

Para evitar que software mal-intencionado interfira nas partições odm , habilite o Android Verified Boot (AVB) para essas partições (assim como você faz para as partições vendor e system ).

Para ativar o AVB, inclua o sinalizador de construção BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS . Para obter detalhes sobre como configurar o AVB em partições dinâmicas, consulte Alterações na configuração do AVB .

Tratando /odm como outra partição /vendor

Para garantir que o sistema lide com a partição odm como uma partição vendor , substitua quaisquer referências vendor codificadas por um conjunto de partições orientadas a hardware (atualmente odm e vendor ). Locais de referência vendor notáveis ​​na plataforma incluem linker dinâmico , gerenciador de pacotes e shell/libc .