Panoramica delle partizioni

I dispositivi Android contengono diverse partizioni o sezioni specifiche dello spazio di archiviazione utilizzate per contenere parti specifiche del software del dispositivo. Ogni partizione contiene un'immagine della partizione (un file IMG) o uno snapshot di tutto il software per la partizione. La figura 1 mostra il layout delle partizioni principali su un dispositivo:

Layout delle partizioni principali.

Figura 1. Layout delle partizioni principali.

Le partizioni sono classificate in tre categorie:

  • Le partizioni di sistema sono partizioni che vengono aggiornate durante l'aggiornamento del sistema operativo e di altre funzionalità. system, boot e init_boot sono partizioni di sistema principali.

  • Le partizioni fornitore contengono codice specifico per il dispositivo e l'hardware che potrebbe non essere mai aggiornato dopo la release iniziale. Le partizioni vendor, vendor_boot e odm sono partizioni principali.

  • Le partizioni non aggiornabili sono partizioni i cui contenuti non vengono aggiornati o vengono aggiornati con i dati utente.

Il codice nelle partizioni di sistema e fornitore può interagire utilizzando un'interfaccia stabile chiamata interfaccia fornitore (VINTF).

Partizioni di sistema

Di seguito è riportato un elenco di tutte le partizioni di sistema e del loro utilizzo:

  • partizione boot. Questa partizione contiene un'immagine del kernel generica (GKI). Questa partizione contiene anche il ramdisk generico nei dispositivi lanciati in Android 12 e versioni precedenti. Per ulteriori informazioni sul ramdisk generico, consulta Contenuti dell'immagine ramdisk generica.

  • Partizione init_boot (Android 13 e versioni successive). Questa partizione contiene un ramdisk generico. In Android 11 e 12, il ramdisk generico si trova nella partizione boot.

  • partizione system. Questa partizione contiene l'immagine di sistema utilizzata per i prodotti OEM.

  • partizione system_ext. Questa partizione contiene risorse di sistema e moduli di sistema proprietari che estendono l'immagine di sistema comune nella partizione system.

  • partizione system_dlkm. Questa partizione contiene i moduli GKI. Per ulteriori informazioni su questa partizione, consulta Implementare una partizione del modulo GKI.

  • partizione product. Questa partizione può contenere moduli specifici del prodotto che non sono raggruppati con altre partizioni.

  • partizione pvmfw. Questa partizione archivia il firmware della macchina virtuale protetta (pvmfw), ovvero il primo codice eseguito nelle VM protette. Per ulteriori informazioni, consulta Firmware della macchina virtuale protetta.

  • partizione generic_bootloader. Questa partizione contiene il bootloader generico.

Partizioni fornitore

Di seguito è riportato un elenco di tutte le partizioni dei fornitori e del loro utilizzo:

  • partizione vendor_boot. Questa partizione contiene il codice di avvio specifico del fornitore. Per ulteriori informazioni, consulta la sezione Partizioni di avvio del fornitore.

  • partizione recovery. Questa partizione memorizza l'immagine di ripristino, che viene avviata durante la procedura di aggiornamento OTA (over-the-air). I dispositivi che supportano aggiornamenti senza interruzioni possono archiviare le immagini di ripristino come ramdisk contenute nell'immagine boot o init_boot. Per ulteriori informazioni sugli aggiornamenti immediati, vedi Aggiornamenti A/B (immediati).

  • partizione vbmeta. Questa partizione contiene le informazioni su Verified Boot per tutte le partizioni. Queste informazioni verificano che le immagini installate in ogni partizione siano attendibili. Per ulteriori informazioni sull'avvio verificato, consulta Avvio verificato.

  • partizione vendor. Questa partizione contiene qualsiasi binario specifico del fornitore e non sufficientemente generico da essere distribuito ad AOSP.

  • partizione vendor_dlkm. Questa partizione contiene i moduli del kernel del fornitore. Se memorizzi i moduli del kernel del fornitore in questa partizione anziché nella partizione vendor, puoi aggiornare i moduli del kernel senza aggiornare la partizione vendor. Per ulteriori informazioni, consulta Partizioni DKLM di fornitori e ODM.

  • partizione odm. Questa partizione contiene personalizzazioni del produttore di design originale (ODM) per i pacchetti di supporto della scheda (BSP) del fornitore di system-on-chip (SoC). Queste personalizzazioni consentono agli ODM di sostituire o personalizzare i componenti SoC e di implementare moduli kernel per componenti specifici della scheda, daemon e funzionalità specifiche dell'ODM nei livelli di astrazione hardware (HAL). Questa partizione è facoltativa. In genere questa partizione viene utilizzata per contenere le personalizzazioni in modo che i dispositivi possano utilizzare una singola immagine fornitore per più SKU hardware. Per ulteriori informazioni, vedi Partizioni ODM.

  • partizione odm_dlkm. Questa partizione è dedicata all'archiviazione dei moduli del kernel ODM. Se memorizzi i moduli del kernel ODM in questa partizione anziché nella partizione odm, puoi aggiornarli senza aggiornare la partizione odm. Per ulteriori informazioni, consulta Partizioni DKLM di fornitori e ODM.

  • partizione radio. Questa partizione contiene l'immagine della radio ed è necessaria solo per i dispositivi che includono una radio con software specifico per la radio in una partizione dedicata.

Partizioni non aggiornabili

Di seguito è riportato un elenco di tutte le partizioni non aggiornabili e del loro utilizzo:

  • partizione cache. Questa partizione contiene dati temporanei ed è facoltativa se il dispositivo utilizza aggiornamenti automatici. Questa partizione non deve essere scrivibile dal bootloader, ma deve essere cancellabile. La dimensione della partizione dipende dal tipo di dispositivo e dalla disponibilità di spazio su userdata; in genere, 50-100 MB sono sufficienti.

  • partizione userdata. Questa partizione contiene le app installate dall'utente e i dati, inclusi quelli di personalizzazione.

  • partizione metadata. Se il tuo dispositivo utilizza la crittografia dei metadati, questa partizione contiene la chiave di crittografia dei metadati. La dimensione di questa partizione è di 16 MB o superiore, non è criptata e i relativi dati non sono snapshot. Questa partizione viene cancellata quando vengono ripristinati i dati di fabbrica del dispositivo.

Regole e consigli per l'aggiornamento delle partizioni

Ti consigliamo di aggiornare tutte le partizioni di sistema nel loro complesso e tutte le partizioni del fornitore nel loro complesso. Aggiornando l'insieme di partizioni nel suo complesso, puoi testare per verificare che le interfacce tra le immagini in ogni partizione rimangano stabili.

Indipendentemente da come aggiorni le partizioni, le seguenti partizioni devono essere aggiornate a causa di dipendenze strettamente accoppiate e della mancanza di API stabili:

  • Le partizioni boot e system_dlkm
  • le partizioni init_boot, system, system_ext e product

Partizioni dinamiche

I dispositivi con Android 11 e versioni successive possono supportare le partizioni dinamiche, un sistema di partizionamento dello spazio utente per Android che consente di creare, ridimensionare o eliminare partizioni durante gli aggiornamenti over-the-air (OTA). Per ulteriori informazioni, vedi Partizioni dinamiche.

  • partizione misc. Questa partizione viene utilizzata dalla partizione di ripristino ed è di almeno 4 KB.

  • partizione tos. Questa partizione contiene l'immagine binaria del sistema operativo Trusty e viene utilizzata solo se il dispositivo include Trusty. Per ulteriori informazioni, vedi Partizioni di Trusty OS (TOS).

Varianti di prodotto Soong

Il sistema di compilazione Soong utilizza le varianti dell'immagine per dividere le dipendenze di compilazione. I moduli nativi (/build/soong/cc) possono modificare i moduli di processo di sistema nella variante core e i moduli di processo del fornitore nella variante del fornitore. Un modulo in una variante dell'immagine non può essere collegato ad altri moduli in una variante dell'immagine diversa.

In Android 12 o versioni successive, un modulo di sistema con vendor_available: true crea una variante del fornitore oltre alla variante principale. Per creare una variante di prodotto, è necessario definire product_available: true. Alcune librerie VNDK senza product_available: true non sono disponibili per i moduli prodotto.