Visão geral das partições

Os dispositivos Android contêm várias partições ou seções específicas de espaço de armazenamento usadas para conter partes específicas do software do dispositivo. Cada partição contém uma imagem de partição (um arquivo IMG) ou um snapshot de todo o software da partição. A Figura 1 mostra o layout das partições principais em um dispositivo:

Layout das partições principais.

Figura 1. Layout das partições principais.

As partições são classificadas em três categorias:

  • As partições do sistema são atualizadas quando o SO e outros recursos são atualizados. As partições system, boot e init_boot são do sistema principal.

  • As partições do fornecedor contêm código específico do dispositivo e do hardware que talvez nunca seja atualizado após o lançamento inicial. As partições vendor, vendor_boot e odm são principais.

  • Partições não atualizáveis são aquelas cujo conteúdo não é atualizado ou é atualizado com dados do usuário.

O código nas partições do sistema e do fornecedor pode interagir usando uma interface estável chamada interface do fornecedor (VINTF).

Partições do sistema

Confira a seguir uma lista de todas as partições do sistema e o uso delas:

  • Partição boot. Essa partição contém uma imagem genérica do kernel (GKI, na sigla em inglês). Essa partição também contém o ramdisk genérico em dispositivos lançados no Android 12 e versões anteriores. Para mais informações sobre ramdisk genérico, consulte Conteúdo da imagem de ramdisk genérico.

  • Partição init_boot (Android 13 e versões mais recentes). Essa partição contém um ramdisk genérico. No Android 11 e 12, o ramdisk genérico está na partição boot.

  • Partição system. Essa partição contém a imagem do sistema usada para produtos OEM.

  • Partição system_ext. Essa partição contém recursos do sistema e módulos proprietários que estendem a imagem comum do sistema na partição system.

  • Partição system_dlkm. Essa partição contém módulos do GKI. Para mais informações sobre essa partição, consulte Implementar uma partição do módulo GKI.

  • Partição product. Essa partição pode conter módulos específicos do produto que não estão agrupados com nenhuma outra partição.

  • Partição pvmfw. Essa partição armazena o firmware da máquina virtual protegida (pvmfw), que é o primeiro código executado em VMs protegidas. Para mais informações, consulte Firmware de máquina virtual protegida.

  • Partição generic_bootloader. Essa partição contém o carregador de inicialização genérico.

Partições do fornecedor

Confira a seguir uma lista de todas as partições do fornecedor e o uso delas:

  • Partição vendor_boot. Essa partição contém código de inicialização específico do fornecedor. Para mais informações, consulte Partições de inicialização do fornecedor.

  • Partição recovery. Essa partição armazena a imagem de recuperação, que é inicializada durante o processo de atualização over-the-air (OTA). Os dispositivos que oferecem suporte a atualizações sem interrupção podem armazenar as imagens de recuperação como um ramdisk contido na imagem boot ou init_boot. Para mais informações sobre atualizações sem interrupção, consulte Atualizações A/B (sem interrupção).

  • Partição vbmeta. Essa partição contém as informações de inicialização verificada para todas as partições. Essas informações verificam se as imagens instaladas em cada partição são confiáveis. Para mais informações sobre a Inicialização verificada, consulte Inicialização verificada.

  • Partição vendor. Essa partição contém qualquer binário específico do fornecedor e não genérico o suficiente para distribuição ao AOSP.

  • Partição vendor_dlkm. Essa partição contém módulos do kernel do fornecedor. Ao armazenar módulos de kernel do fornecedor nessa partição em vez da vendor, é possível atualizar os módulos de kernel sem atualizar a partição vendor. Para mais informações, consulte Partições DKLM de fornecedores e ODMs.

  • Partição odm. Essa partição contém personalizações do fabricante de projeto original (ODM) para pacotes de suporte de placa (BSPs) do fornecedor do system on a chip (SoC). Essas personalizações permitem que os ODMs substituam ou personalizem componentes do SoC e implementem módulos de kernel para componentes específicos da placa, daemons e recursos específicos do ODM em camadas de abstração de hardware (HALs). Essa partição é opcional. Normalmente, essa partição é usada para conter personalizações para que dispositivos possam usar uma única imagem de fornecedor para vários SKUs de hardware. Para mais informações, consulte Partições da ODM.

  • Partição odm_dlkm. Essa partição é dedicada ao armazenamento de módulos do kernel do ODM. Ao armazenar módulos do kernel ODM nessa partição, em vez da partição odm, é possível atualizar os módulos do kernel ODM sem atualizar a partição odm. Para mais informações, consulte Partições DKLM de fornecedores e ODMs.

  • Partição radio. Essa partição contém a imagem de rádio e é necessária apenas para dispositivos que incluem um rádio com software específico em uma partição dedicada.

Partições não atualizáveis

Confira a seguir uma lista de todas as partições não atualizáveis e o uso delas:

  • Partição cache. Essa partição contém dados temporários e é opcional se o dispositivo usa atualizações sem interrupção. Ela não precisa ser gravável pelo 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 em userdata. Normalmente, 50 a 100 MB são suficientes.

  • Partição userdata. Essa partição contém apps e dados instalados pelo usuário, incluindo dados de personalização.

  • Partição metadata. Se o dispositivo usar criptografia de metadados, essa partição vai conter a chave de criptografia de metadados. O tamanho dessa partição é de 16 MB ou maior, ela não está criptografada e os dados não foram capturados em um snapshot. Essa partição é apagada quando o dispositivo é redefinido para a configuração original.

Regras e recomendações de atualização de partição

Recomendamos atualizar todas as partições do sistema como um todo e todas as partições do fornecedor como outro todo. Ao atualizar o conjunto de partições como um todo, você pode testar para verificar se as interfaces entre as imagens em cada partição permanecem estáveis.

Independente de como você atualiza as partições, as seguintes precisam ser atualizadas devido a dependências fortemente acopladas e falta de APIs estáveis:

  • As partições boot e system_dlkm
  • as partições init_boot, system, system_ext e product

Partições dinâmicas

Dispositivos com Android 11 e versões mais recentes podem oferecer suporte a partições dinâmicas, que são um sistema de particionamento no espaço do usuário para Android que permite criar, redimensionar ou destruir partições durante atualizações pelo ar (OTA). Para mais informações, consulte Partições dinâmicas.

  • Partição misc. Essa partição é usada pela partição de recuperação e tem 4 KB ou mais.

  • Partição tos. Essa partição contém a imagem binária do SO Trusty e é usada somente se o dispositivo incluir o Trusty. Para mais informações, consulte Partições do Trusty OS (TOS).

Variantes de produto do Soong

O sistema de build Soong usa variantes de imagem para dividir dependências de build. Os módulos nativos (/build/soong/cc) podem mudar 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 ser vinculado a outros módulos em uma variante de imagem diferente.

No Android 12 ou mais recente, um módulo do sistema com vendor_available: true cria uma variante do fornecedor além da variante principal. Para criar uma variante de produto, o product_available: true precisa ser definido. Algumas bibliotecas VNDK sem product_available: true não estão disponíveis para módulos de produtos.