Panoramica delle partizioni

I dispositivi Android contengono diverse partizioni o sezioni specifiche di 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 di base su un dispositivo:

Layout delle partizioni principali.

Figura 1. Layout delle partizioni principali.

Le partizioni sono classificate in tre categorie:

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

  • Le partizioni del 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 del fornitore principali.

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

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

Partizioni di sistema

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

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

  • 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.

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

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

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

  • product. Questa partizione può contenere moduli specifici per prodotto che non sono inclusi in altre partizioni.

  • pvmfw. Questa partizione memorizza il firmware della VM protetta (pvmfw), che è il primo codice eseguito nelle VM protette. Per ulteriori informazioni, consulta Firmware delle macchine virtuali protette.

  • generic_bootloader. Questa partizione contiene il bootloader generico.

Partizioni del fornitore

Di seguito è riportato un elenco di tutte le partizioni del fornitore e del relativo utilizzo:

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

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

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

  • vendor. Questa partizione contiene tutti i file binari specifici del fornitore e non sufficientemente generici da distribuire ad AOSP.

  • 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 del fornitore e dell'ODM.

  • odm. Questa partizione contiene le personalizzazioni del produttore di design originale (ODM) ai pacchetti di supporto della scheda (BSP) del fornitore di system on a chip (SoC). Queste personalizzazioni consentono agli ODM di sostituire o personalizzare i componenti SoC e di implementare moduli del kernel per componenti, demoni e funzionalità specifici della scheda sugli HAL (Hardware Abstraction Layer). Questa partizione è facoltativa. In genere, questa partizione viene utilizzata per contenere le personalizzazioni in modo che i dispositivi possano utilizzare un'unica immagine del fornitore per più SKU hardware. Per ulteriori informazioni, consulta la sezione Partizioni ODM.

  • odm_dlkm. Questa partizione è dedicata allo stoccaggio 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 del fornitore e dell'ODM.

  • 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 il relativo utilizzo:

  • cache. Questa partizione contiene dati temporanei ed è facoltativa se il tuo dispositivo utilizza gli aggiornamenti senza interruzioni. Questa partizione non deve essere obbligatoriamente 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, sono sufficienti 50-100 MB.

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

  • metadata. Se il dispositivo utilizza la crittografia dei metadati, questa partizione contiene la chiave di crittografia dei metadati. La dimensione di questa partizione è pari o superiore a 16 MB, non è criptata e non viene eseguito lo snapshot dei dati. 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 insieme e tutte le partizioni del fornitore in un altro insieme. Aggiornando l'insieme di partizioni come un tutt'uno, puoi verificare che le interfacce tra le immagini di ogni partizione rimangano stabili.

Indipendentemente da come aggiorni le partizioni, le seguenti 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, ovvero un sistema di partizione dello spazio utente per Android che consente di creare, ridimensionare o eliminare le partizioni durante gli aggiornamenti over-the-air (OTA). Per ulteriori informazioni, consulta Partizioni dinamiche.

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

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

Varianti di prodotto Soong

Il sistema di compilazione Soong utilizza le varianti dell'immagine per suddividere le dipendenze di compilazione. I moduli nativi (/build/soong/cc) possono mutare i moduli di processo di sistema nella variante di base e i moduli di processo del fornitore nella variante del fornitore. Un modulo in una variante dell'immagine non può collegarsi 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 di base. Per creare una variante di prodotto, è necessario definire product_available: true. Alcune librerie VNDK senza product_available: true non sono disponibili per i moduli di prodotto.