Os dispositivos Android incluem várias partições que atendem a diferentes funções no processo de inicialização.
Partições padrão
partição de
boot
. Esta partição contém uma imagem do kernel e é criada usandomkbootimg
. Você pode usar uma partição virtual para fazer o flash de qualquer imagem diretamente sem fazer o flash de uma nova partição de inicialização. Esta partição também contém o ramdisk genérico em dispositivos lançados antes do Android 13.núcleo. A partição virtual do
kernel
sobrescreve o kernel (zImage
,zImage-dtb
,Image.gz-dtb
) escrevendo a nova imagem do kernel sobre a imagem do kernel antigo. Se o kernel de desenvolvimento fornecido for incompatível, talvez seja necessário atualizar a partiçãovendor
,system
oudtb
(se houver) com módulos de kernel associados.disco ram. A partição
ramdisk
virtual substitui o ramdisk gravando a nova imagem do ramdisk sobre a antiga imagem do ramdisk.
A operação de substituição determina o local inicial da imagem existente no eMMC e copia a nova imagem para esse local. A nova imagem (kernel ou ramdisk) pode ser maior que a existente; para liberar espaço, o bootloader pode mover os dados seguindo a imagem ou abandonar a operação com um erro.
partição
init_boot
. Esta partição contém o ramdisk genérico para dispositivos iniciados com Android 13 e posteriores.partição
system
. Esta partição contém a estrutura do Android.partição
odm
. Esta partição contém personalizações do fabricante de design original (ODM) para pacotes de suporte de placa (BSPs) do fornecedor do sistema no chip (SoC). Essas personalizações permitem que os ODMs substituam ou personalizem componentes do SoC e implementem módulos do kernel para componentes específicos da placa, daemons e recursos específicos do ODM em camadas de abstração de hardware (HALs). Esta partição é opcional; normalmente, é usado para conter personalizações para que os dispositivos possam usar uma única imagem de fornecedor para vários SKUs de hardware. Para obter detalhes, consulte Partições ODM .partição
odm_dlkm
. Esta partição é dedicada ao armazenamento de módulos do kernel ODM. Armazenar módulos do kernel ODM na partiçãoodm_dlkm
(em oposição à partiçãoodm
) possibilita atualizar os módulos do kernel ODM sem atualizar a partiçãoodm
.partição de
recovery
. Essa partição armazena a imagem de recuperação, que é inicializada durante o processo OTA. Os dispositivos que oferecem suporte a atualizações contínuas podem armazenar as imagens de recuperação como um ramdisk contido na imagemboot
ouinit_boot
(em vez de uma imagem separada).partição de
cache
. Essa partição armazena dados temporários e é opcional se um dispositivo usar atualizações contínuas. A partição de cache não precisa ser gravável a partir do carregador de inicialização, mas precisa ser apagável. O tamanho da partição depende do tipo de dispositivo e da disponibilidade de espaço emuserdata
; normalmente, 50 MB–100 MB são suficientes.partição
misc
. Essa partição é usada pela partição de recuperação e tem 4 KB ou mais.partição
userdata
. Essa partição contém aplicativos e dados instalados pelo usuário, incluindo dados de personalização.partição
metadata
. Essa partição é usada para armazenar a chave de criptografia de metadados quando o dispositivo usa criptografia de metadados . O tamanho é 16 MB ou maior. Ele não é criptografado e seus dados não são instantâneos. Ele é apagado quando o dispositivo é redefinido de fábrica. O uso desta partição é estritamente limitado.partição
vendor
. Esta partição contém qualquer binário que não seja distribuível ao AOSP. Se o dispositivo não contiver informações proprietárias, você poderá omitir esta partição.partição
vendor_dlkm
. Esta partição é dedicada ao armazenamento de módulos de kernel do fornecedor. Armazenar módulos do kernel do fornecedor na partiçãovendor_dlkm
(em oposição à partição dovendor
) torna possível atualizar os módulos do kernel sem atualizar a partição dovendor
.partição
radio
. Esta partição contém a imagem de rádio e é necessária apenas para dispositivos que incluem um rádio com software específico de rádio em uma partição dedicada.tos
. Esta partição armazena a imagem binária do Trusty OS e é usada somente se o dispositivo incluir Trusty. Para obter detalhes, consulte Partições TOS .
Partições dinâmicas
Os dispositivos que executam o Android 11 e superior podem oferecer suporte a partições dinâmicas, que são um sistema de particionamento de espaço do usuário para Android que permite criar, redimensionar ou destruir partições durante atualizações OTA (over-the-air). Para obter detalhes, consulte Partições dinâmicas .
Designando partições críticas
Se o dispositivo requer partições ou dados específicos para ser executado, você deve designar essas partições/dados como totalmente protegidos ou re-flashable, o que significa que eles podem ser reconstruídos, fornecidos ou extraíveis usando um comando fastboot oem
. Isso inclui dados como configurações específicas de fábrica por dispositivo, números de série, dados de calibração e muito mais.
Mudanças no Android 11
O Android 11 inclui várias alterações nas partições, incluindo restrições de vinculação a bibliotecas e novas variantes de imagem Soong.
Figura 1. Layout de partição no Android 11
Imagem de sistema único (SSI). Uma nova imagem conceitual que contém as imagens
system
esystem_ext
. Quando essas partições são comuns para um conjunto de dispositivos de destino, esses dispositivos podem compartilhar o SSI e pular a criação das imagenssystem
esystem_ext
.partição
system_ext
. Uma nova partição que pode usar recursossystem
e pode incluir módulos do sistema que:Estenda os módulos do sistema AOSP na partição do
system
. Recomendamos fazer o upstream desses módulos para o AOSP para que possam ser instalados na partição dosystem
posteriormente.Agrupe módulos específicos de OEM ou SoC. Recomendamos desagrupar esses módulos para que possam ser instalados na partição do
product
ou dovendor
.
partição
system
. Imagem de sistema comum usada para produtos OEM. Recomendamos mover os módulos proprietários para fora da partição dosystem
, enviando-os para o AOSP ou movendo-os para a partiçãosystem_ext
.partição do
product
. Essa partição agora pode usar interfaces permitidas para instalar módulos específicos do produto que não são empacotados com outras partições.
Alterações do VNDK
O Vendor Native Development Kit (VNDK) é um conjunto de bibliotecas instaladas na partição do system
e projetadas exclusivamente para os fornecedores implementarem suas HALs.
No Android 10 e inferior, a partição do
vendor
pode ser vinculada a bibliotecas VNDK na partição dosystem
, mas não pode ser vinculada a outras bibliotecas na partição dosystem
. Os módulos nativos na partição doproduct
podem ser vinculados a qualquer biblioteca na partição dosystem
.No Android 11 e superior, as partições do
product
e dovendor
podem ser vinculadas a bibliotecas VNDK na partição dosystem
, mas não podem ser vinculadas a outras bibliotecas na partição dosystem
.
Variantes de produtos Soong
O sistema de compilação Soong usa variantes de imagem para dividir as dependências de compilação. Módulos nativos ( /build/soong/cc
) podem alterar os módulos de processo do sistema para a variante principal e os módulos de processo do fornecedor para a variante do fornecedor; um módulo em uma variante de imagem não pode vincular a outros módulos em uma variante de imagem diferente.
No Android 10 ou inferior, um módulo do sistema cria automaticamente variantes principais. Ele também pode criar variantes de fornecedor definindo
vendor_available: true
em seus arquivosAndroid.bp
; isso permite que os módulos do fornecedor sejam vinculados aos módulos do sistema. As bibliotecas VNDK, que são variantes de fornecedor de bibliotecas desystem
, também podem criar variantes de fornecedor para módulos de fornecedor definindovendor_available: true
em seus arquivosAndroid.bp
(consulte o exemplo ).No Android 11, um módulo do sistema também pode criar uma variante de produto (além das variantes principais e de fornecedor) definindo
vendor_available: true
.No Android 12 ou superior, um módulo do sistema com
vendor_available: true
cria uma variante de fornecedor além da variante principal. Para criar uma variante de produto,product_available: true
deve ser definido. Algumas bibliotecas do VNDK semproduct_available: true
não estão disponíveis para módulos do produto.