Partizioni ODM

Android 10 include il supporto per la creazione di partizioniodm utilizzando il sistema di compilazione di Android.

Informazioni sulle partizioni ODM

I produttori di design originali (ODM) personalizzano i pacchetti di supporto della scheda (BSP) del fornitore di system on a chip (SoC) per i propri dispositivi specifici (le proprie schede). In questo modo, possono implementare moduli del kernel per componenti specifici della scheda, demoni specifici della scheda o le proprie funzionalità sui livelli di astrazione hardware (HAL). Potrebbe anche voler sostituire o personalizzare i componenti SoC.

Nelle release precedenti di Android, queste personalizzazioni impedivano l'utilizzo di un'unica immagine del fornitore per i dispositivi con lo stesso SoC (o con SoC diversi, ma della stessa famiglia). In Android 10 e versioni successive, puoi utilizzare una partizione odm separata per le personalizzazioni, che ti consente di utilizzare un'unica immagine del fornitore per più SKU hardware.

Utilizzare le partizioni dei prodotti e degli ODM

Android 9 ha aggiunto il supporto per la creazione di partizioniproduct, consentendo l'utilizzo di un'unica immagine di sistema per più SKU di software forniti da immagini product.img diverse. La partizione product è destinata agli SKU di software, mentre la partizione odm è destinata agli SKU di hardware.

Con le partizioni di prodotto e ODM dedicate, puoi utilizzare la partizione system per ospitare codice generico da condividere tra molti SKU software e la partizione vendor per ospitare codice BSP specifico per SoC da condividere tra più dispositivi in base al SoC in questione.

L'utilizzo di partizioni separate presenta degli svantaggi, ad esempio la difficoltà di gestire lo spazio su disco (ad esempio, devi riservare una quantità limitata di spazio per la crescita futura). Tuttavia, il supporto di Android 10 per le partizioni dinamiche elimina il problema del disco e rende possibile la ripartizione di un dispositivo durante un aggiornamento over-the-air (OTA).

Componenti ODM

La partizione odm contiene i seguenti componenti specifici dell'ODM (simili alla partizione vendor), elencati nella tabella seguente.

Componente specifico per l'ODM Posizione
Moduli kernel caricabili (LKM) /odm/lib/modules/*.ko
Librerie native /odm/lib[64]
HAL /odm/lib[64]/hw
SEPolicy /odm/etc/selinux
Dati dell'oggetto VINTF /odm/etc/vintf
init.rc file /odm/etc/init
Proprietà di sistema /odm/build.prop
Overlay delle risorse di runtime (RRO) /odm/overlay/*.apk
App /odm/app/*.apk
Priv-apps /odm/priv-app/*.apk
Librerie Java /odm/framework/*.jar
Configurazioni di sistema del framework Android /odm/etc/sysconfig/* e /odm/etc/permissions/*

Nessuna immagine personalizzata

Non utilizzare immagini personalizzate perché non sono supportate le seguenti funzionalità:

  • Installazione di un modulo in un target specifico. Le immagini personalizzate supportano la copia di elementi in un'immagine, ma non possono installare un modulo in una partizione specifica specificando la partizione di destinazione come parte di una regola di compilazione.
  • Soong. custom_images non può essere compilato utilizzando il sistema di compilazione Soong.
  • Aggiornamento OTA. Le immagini personalizzate vengono utilizzate come immagini ROM di fabbrica che non possono essere aggiornate tramite OTA.

Mantenere gli ABI tra le partizioni

La partizione odm è un'estensione della partizione vendor. Quando prendi in considerazione la stabilità dell'interfaccia a bit dell'applicazione (ABI), tieni presente la seguente architettura.

Mantenimento dell'ABI tra le partizioni

Figura 1. Mantenimento dell'ABI tra le partizioni.

  • Non esiste stabilità ABI tra le partizioni odm e vendor. L'upgrade deve essere eseguito contemporaneamente su entrambe le partizioni.
  • Le partizioni odm e vendor possono dipendere l'una dall'altra, ma la partizione vendor deve funzionare senza una partizione odm.
  • L'ABI tra odm e system è uguale all'ABI tra vendor e system.

L'interazione diretta tra la partizione product e la partizione vendor o odm non è consentita. (Questa operazione viene applicata da SEpolicy.)

Implementare le partizioni ODM

Prima di implementare una nuova partizione, esamina le modifiche AOSP correlate.

Configura le partizioni ODM

Per configurare le partizioni odm, includi questi flag di compilazione:

  • BOARD_ODMIMAGE_PARTITION_SIZE per una dimensione della partizione fissa
  • PRODUCT_USE_DYNAMIC_PARTITIONS e BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE per una dimensione della partizione dinamica.
  • Tipo di file system BOARD_ODMIMAGE_FILE_SYSTEM_TYPE utilizzato per l'immagine ODM
  • PRODUCT_ODM_PROPERTIES per /odm/build.prop da utilizzare all'interno di un $(call inherit-product path/to/device.mk), come in PRODUCT_ODM_PROPERTIES += product.abc=ok

Installare un modulo in una partizione ODM

Utilizza questi flag di compilazione per installare un modulo in una partizione odm:

  • device_specific: true in Android.bp
  • LOCAL_ODM_MODULE := true in Android.mk

Attiva Avvio verificato

Per impedire a software dannosi di manomettere le partizioni odm, attiva Android Verified Boot (AVB) per queste partizioni (come faresti per le partizioni vendor e system).

Per attivare AVB, includi il flag di compilazioneBOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS. Per informazioni dettagliate sulla configurazione di AVB nelle partizioni dinamiche, consulta Modifiche alla configurazione di AVB.

Tratta /odm come un'altra partizione /vendor

Per assicurarti che il sistema gestisca la partizione odm come una vendor, sostituisci eventuali riferimenti vendor hardcoded con un insieme di partizioni orientate all'hardware (attualmente odm e vendor). Posizioni di riferimento vendor notevoli nella piattaforma includono linker Dinamico, package manager e shell/libc.