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.

Figura 1. Mantenimento dell'ABI tra le partizioni.
- Non esiste stabilità ABI tra le partizioni
odm
evendor
. L'upgrade deve essere eseguito contemporaneamente su entrambe le partizioni. - Le partizioni
odm
evendor
possono dipendere l'una dall'altra, ma la partizionevendor
deve funzionare senza una partizioneodm
. - L'ABI tra
odm
esystem
è uguale all'ABI travendor
esystem
.
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 fissaPRODUCT_USE_DYNAMIC_PARTITIONS
eBOARD_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 inPRODUCT_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
inAndroid.bp
LOCAL_ODM_MODULE := true
inAndroid.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
.