O Android 10 inclui suporte para a construção de partições odm
usando o sistema de construção Android.
Sobre partições ODM
Os fabricantes de design original (ODMs) personalizam os pacotes de suporte de placa (BSPs) do fornecedor do 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 os componentes SoC.
Em versões anteriores do Android, essas personalizações impediam o uso de uma única imagem de fornecedor para dispositivos com o mesmo SoC (ou com diferentes SoCs, mas da mesma família). No Android 10 e superior, 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 de product
, permitindo o uso de uma única imagem do sistema para vários SKUs de software fornecidos por diferentes imagens product.img
. Enquanto a partição do product
se destina a SKUs de software, a partição odm
é destinada a SKUs de hardware.
Com partições de produto e ODM dedicadas, é possível usar a partição do system
para hospedar código genérico para compartilhamento entre muitos SKUs de software e a partição do vendor
para hospedar código BSP específico de SoC para compartilhar entre vários dispositivos com base no SoC fornecido.
Usar 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 remove 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 do 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 |
SEPolicy | /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 |
Apps | /odm/app/*.apk |
Apps privados | /odm/priv-app/*.apk |
Bibliotecas Java | /odm/framework/*.jar |
Configurações do sistema do Android Framework | /odm/etc/sysconfig/* e /odm/etc/permissions/* |
Sem imagens personalizadas
Não use imagens personalizadas porque não têm 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 construção.
- Soong.
custom_images
não pode ser construído 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 por OTA.
Manter 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), tenha em mente a seguinte arquitetura.

- Não há estabilidade de ABI entre as partições
odm
e dovendor
. Ambas as partições devem ser atualizadas ao mesmo tempo. - As partições
odm
evendor
podem depender uma da outra, mas a partiçãovendor
deve funcionar sem uma partiçãoodm
. - A ABI entre
odm
esystem
é a mesma que a ABI entrevendor
esystem
.
A interação direta entre a partição do product
e o vendor
ou partição 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
eBOARD_ODMIMAGE_PARTITION_RESERVED_SIZE
para um tamanho de partição dinâmica -
BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
tipo de sistema de arquivo usado para a imagem ODM -
PRODUCT_ODM_PROPERTIES
para/odm/build.prop
para uso em$(call inherit-product path/to/device.mk)
, como emPRODUCT_ODM_PROPERTIES += product.abc=ok
Instalando um módulo em uma partição ODM
Use estes sinalizadores de compilação para instalar um módulo em uma partição odm
:
-
device_specific: true
emAndroid.bp
-
LOCAL_ODM_MODULE := true
emAndroid.mk
Habilitando inicialização verificada
Para evitar que o software malicioso adultere as partições odm
, habilite o Android Verified Boot (AVB) para essas partições (assim como você faz para o vendor
e as partições do system
).
Para habilitar o AVB, inclua o sinalizador de construção BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS
. Para obter detalhes sobre a configuração do AVB em partições dinâmicas, consulte Alterações na configuração do AVB .
Tratando / odm como outra partição / fornecedor
Para garantir que o sistema lida com a partição odm
como uma partição de vendor
, substitua todas as referências de vendor
embutidas em código por um conjunto de partições orientadas a hardware (atualmente odm
e vendor
). Os locais de referência de vendor
notáveis na plataforma incluem vinculador dinâmico , gerenciador de pacotes e shell/libc
.