O Android 10 inclui suporte à criação
Partições odm
usando o sistema de build do Android.
Sobre partições ODM
Fabricantes de design original (ODMs) personalizam o fornecedor system on chip (SoC) pacotes de suporte de placa (BSPs, na sigla em inglês) a dispositivos específicos (as placas). Isso permite que implementem módulos do kernel para componentes específicos da placa, daemons específicos da placa ou os próprios recursos em camadas de abstração de hardware (HALs, na sigla em inglês). Eles também podem substituir ou personalizar componentes do SoC.
Em versões anteriores do Android, essas personalizações impediam o uso de um único
imagem do fornecedor para dispositivos com o mesmo SoC (ou com SoCs diferentes, mas no
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
product
partições específicas, permitindo o uso de uma única imagem do sistema para vários softwares
SKUs fornecidas por imagens product.img
diferentes. Enquanto o
A partição product
é destinada a SKUs de software, a
odm
é destinada a SKUs de hardware.
Com partições de produto dedicado e ODM, é possível usar o system
para hospedar um código genérico para compartilhamento entre muitas SKUs de software, e a
Partição 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 de gerenciar espaço em disco (por exemplo, reserve um espaço limitado para crescimento). No entanto, o suporte do Android 10 para partições dinâmicas remove o problema do disco e faz com que o reparticionamento do dispositivo seja feito durante uma atualização over-the-air (OTA) possível.
Componentes ODM
A partição odm
contém os seguintes componentes específicos de ODM:
(semelhante à partição vendor
), listado na tabela a seguir.
Componente específico de ODM | Local |
---|---|
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 |
Objeto VINTF dados | /odm/etc/vintf |
init.rc
arquivos |
/odm/etc/init |
Propriedades do sistema | /odm/build.prop |
Sobreposições de recursos no momento da execução (RROs, na sigla em inglês) | /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/* |
Nenhuma imagem personalizada
Não usar personalizado images porque elas não são compatíveis com o seguinte:
- Instalação de um módulo em um destino específico. As imagens personalizadas são compatíveis com a cópia de artefatos em uma imagem, mas não instalar um módulo em uma partição específica especificando a partição de destino como parte de uma regra de criação.
- Soong. Não é possível criar
custom_images
usando o sistema de build Soong. - atualização OTA. Imagens personalizadas são usadas como de fábrica que não podem ser atualizadas por OTA.
Manter ABIs entre partições
A partição odm
é uma extensão de vendor
.
partição. Ao considerar a estabilidade da interface binária do aplicativo (ABI), mantenha
a arquitetura a seguir em mente.
Figura 1. Manter a ABI entre partições.
- Não há estabilidade de ABI entre
odm
evendor
partições. As duas partições precisam ser atualizadas ao mesmo tempo tempo de resposta. - As partições
odm
evendor
podem depender mas a partiçãovendor
precisa 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 product
e a
vendor
ou odm
não está
permitido. Isso é imposto pela SEpolicy.
Implementar partições ODM
Antes de implementar uma nova partição, consulte AOSP relacionado mudanças.
Configurar partições do 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 partição dinâmica tamanho- Tipo de sistema de arquivos
BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
usado para o Imagem ODM PRODUCT_ODM_PROPERTIES
para/odm/build.prop
por usar 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 um software malicioso adultere as partições odm
, faça o seguinte:
ativar a Inicialização verificada do Android
(AVB) para essas partições, da mesma forma que para vendor
e
system
).
Para ativar o AVB, inclua a flag de build
BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS
: Para detalhes sobre como configurar
em partições dinâmicas, consulte
Configuração do AVB
mudanças.
Trate /odm como outra partição /vendor
Para garantir que o sistema processe a partição odm
como uma
vendor
, substitua qualquer vendor
codificada
com um conjunto de partições orientadas a hardware (atualmente
odm
e vendor
). vendor
notável
locais de referência na plataforma incluem
dinâmico
vinculador,
pacote
de projeto e shell/libc
.