O Android 10 inclui suporte à criação de
partições odm
usando o sistema de build do Android.
Sobre as partições ODM
Os fabricantes de design original (ODMs, na sigla em inglês) personalizam pacotes de suporte de placa (BSPs, na sigla em inglês) do fornecedor do system on chip (SoC) para dispositivos específicos deles (as placas). Isso permite que eles implementem módulos de kernel para componentes específicos da placa, daemons específicos da placa ou os próprios recursos nas camadas de abstração de hardware (HALs). Eles também podem substituir ou personalizar componentes do SoC.
Em versões anteriores do Android, essas personalizações impediam o uso de uma única
imagem do fornecedor para dispositivos com o mesmo SoC (ou com SoCs diferentes, mas na
mesma família). No Android 10 e versões mais recentes, é possível usar uma
partição odm
separada para personalizações, o que permite
usar uma única imagem de fornecedor para vários SKUs de hardware.
Usar partições de produto e ODM
O Android 9 adicionou suporte à criaçã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
. Enquanto a
partição product
é destinada a SKUs de software, a
partição odm
é destinada a SKUs de hardware.
Com partições de produto dedicadas e ODM, é possível usar a partição system
para hospedar o código genérico e compartilhar entre muitos SKUs de software, e a
partição vendor
para hospedar o código BSP específico do SoC e compartilhar entre
vários dispositivos com base no SoC.
O uso de partições separadas tem desvantagens, como a dificuldade em gerenciar o espaço em disco. Por exemplo, é necessário reservar uma quantidade limitada de espaço para o crescimento futuro. No entanto, o suporte do Android 10 para partições dinâmicas remove o problema do disco e torna possível particionar um dispositivo durante uma atualização over-the-air (OTA).
Componentes do 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 | Local |
---|---|
Módulos do kernel carregáveis (LKMs) | /odm/lib/modules/*.ko |
Bibliotecas nativas | /odm/lib[64] |
HALs | /odm/lib[64]/hw |
SEPolicy | /odm/etc/selinux |
Dados de 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 |
Priv-apps | /odm/priv-app/*.apk |
Bibliotecas Java | /odm/framework/*.jar |
Configurações do sistema do Android Framework | /odm/etc/sysconfig/* e /odm/etc/permissions/* |
Nenhuma imagem personalizada
Não use imagens personalizadas porque elas não têm suporte para o seguinte:
- Instalação de um módulo em um destino específico. As imagens personalizadas oferecem suporte à 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.
- Soong. O
custom_images
não pode ser criado usando o sistema de build do Soong. - Atualização OTA. As imagens personalizadas são usadas como imagens ROM de fábrica que não podem ser atualizadas por OTA.
Manter ABIs entre partições
A partição odm
é uma extensão da partição
vendor
. Ao considerar a estabilidade da interface binária do aplicativo (ABI), considere
a arquitetura a seguir.

Figura 1. Manter a ABI entre partições.
- Não há estabilidade de ABI entre as partições
odm
evendor
. As duas partições precisam ser atualizadas ao mesmo tempo. - As partições
odm
evendor
podem depender uma da outra, mas a partiçãovendor
precisa funcionar sem uma partiçãoodm
. - A ABI entre
odm
esystem
é igual à ABI entrevendor
esystem
.
A interação direta entre a partição product
e a
vendor
ou odm
não é
permitida. Isso é aplicado pelo SEpolicy.
Implementar partições ODM
Antes de implementar uma nova partição, revise as mudanças relacionadas ao AOSP.
Configurar partições ODM
Para configurar partições odm
, inclua estas flags de build:
BOARD_ODMIMAGE_PARTITION_SIZE
para um tamanho de partição fixoPRODUCT_USE_DYNAMIC_PARTITIONS
eBOARD_ODMIMAGE_PARTITION_RESERVED_SIZE
para um tamanho de partição dinâmica- Tipo de sistema de arquivos
BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
usado para a imagem do ODM PRODUCT_ODM_PROPERTIES
para/odm/build.prop
para uso em um$(call inherit-product path/to/device.mk)
, como emPRODUCT_ODM_PROPERTIES += product.abc=ok
Instalar um módulo em uma partição ODM
Use estas flags de build para instalar um módulo em uma partição odm
:
device_specific: true
emAndroid.bp
LOCAL_ODM_MODULE := true
emAndroid.mk
Ativar a inicialização verificada
Para evitar que softwares maliciosos adulterem partições odm
,
ative a Inicialização verificada do Android
(AVB) para essas partições, assim como você faz para partições vendor
e
system
.
Para ativar o AVB, inclua a flag de build
BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS
. Para saber mais sobre como configurar
o AVB em partições dinâmicas, consulte
Mudanças na configuração
do AVB.
Tratar /odm como outra partição /vendor
Para garantir que o sistema processe a partição odm
como uma
partição vendor
, substitua todas as referências vendor
codificadas com um conjunto de partições orientadas a hardware (atualmente
odm
e vendor
). Locais de referência vendor
importantes na plataforma incluem
linkador
dinâmico,
gerenciador
de pacotes e shell/libc
.