Android 10 include il supporto per la creazione di partizioni odm
utilizzando il sistema di build Android.
Informazioni sulle partizioni ODM
I produttori di progetti originali (ODM) personalizzano i pacchetti di supporto delle schede (BSP) dei fornitori System-on-chip (SoC) in base ai loro dispositivi specifici (le loro schede). Ciò consente loro di implementare moduli del kernel per componenti specifici della scheda, demoni specifici della scheda o le proprie funzionalità su livelli di astrazione hardware (HAL). Potrebbero anche voler sostituire o personalizzare i componenti SoC.
Nelle versioni precedenti di Android, tali personalizzazioni impedivano l'uso di un'immagine di un unico fornitore per dispositivi con lo stesso SoC (o con SoC diversi, ma nella 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.
Utilizzo delle partizioni del prodotto e dell'ODM
Android 9 ha aggiunto il supporto per la creazione di partizioni product
, consentendo l'uso di un'unica immagine di sistema per più SKU software forniti da diverse immagini product.img
. Mentre la partizione product
è destinata agli SKU software, la partizione odm
è destinata agli SKU hardware.
Con le partizioni dedicate al prodotto e all'ODM, è possibile utilizzare la partizione system
per ospitare codice generico da condividere tra più SKU software e la partizione vendor
per ospitare codice BSP specifico del SoC da condividere tra più dispositivi in base al SoC specificato.
L'utilizzo di partizioni separate presenta degli svantaggi, come la difficoltà nella gestione dello spazio su disco (ad esempio, è necessario riservare una quantità limitata di spazio per la crescita futura). Tuttavia, il supporto di Android 10 per le partizioni dinamiche rimuove il problema del disco e rende possibile il ripartizionamento 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 dell'ODM | Posizione |
---|---|
Moduli kernel caricabili (LKM) | /odm/lib/modules/*.ko |
Librerie native | /odm/lib[64] |
HAL | /odm/lib[64]/hw |
SEPolitica | /odm/etc/selinux |
Dati oggetto VINTF | /odm/etc/vintf |
file init.rc | /odm/etc/init |
Proprietà di sistema | /odm/build.prop |
Sovrapposizioni di risorse di runtime (RRO) | /odm/overlay/*.apk |
App | /odm/app/*.apk |
App private | /odm/priv-app/*.apk |
Librerie Java | /odm/framework/*.jar |
Configurazioni del sistema Android Framework | /odm/etc/sysconfig/* e /odm/etc/permissions/* |
Nessuna immagine personalizzata
Non utilizzare immagini personalizzate perché non supportano quanto segue:
- Installazione di un modulo su un target specifico. Le immagini personalizzate supportano la copia degli artefatti 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 creato utilizzando il sistema di compilazione Soong. - Aggiornamento dell'OTA. Le immagini personalizzate vengono utilizzate come immagini ROM di fabbrica che non possono essere modificate tramite OTA.
Mantenimento degli ABI tra le partizioni
La partizione odm
è un'estensione della partizione del vendor
. Quando si considera la stabilità dell'interfaccia binaria dell'applicazione (ABI), tenere presente la seguente architettura.
- Non c'è stabilità ABI tra le partizioni
odm
evendor
. Entrambe le partizioni devono essere aggiornate contemporaneamente. - Le partizioni
odm
evendor
possono dipendere l'una dall'altra, ma la partizionevendor
deve funzionare senza una partizioneodm
. - L'ABI tra
odm
esystem
è lo stesso dell'ABI travendor
esystem
.
Non è consentita l'interazione diretta tra la partizione product
e il vendor
o la partizione odm
. (Ciò è imposto da SEpolicy.)
Implementazione di partizioni ODM
Prima di implementare una nuova partizione, rivedere le relative modifiche AOSP .
Configurazione delle partizioni ODM
Per impostare le partizioni odm
, includi questi flag di build:
-
BOARD_ODMIMAGE_PARTITION_SIZE
per una dimensione di partizione fissa -
PRODUCT_USE_DYNAMIC_PARTITIONS
eBOARD_ODMIMAGE_PARTITION_RESERVED_SIZE
per una dimensione di partizione dinamica -
BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
tipo di file system 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
Installazione di un modulo su una partizione ODM
Utilizza questi flag di build per installare un modulo su una partizione odm
:
-
device_specific: true
inAndroid.bp
-
LOCAL_ODM_MODULE := true
inAndroid.mk
Abilitazione dell'avvio verificato
Per impedire che software dannoso manometta le partizioni odm
, abilita Android Verified Boot (AVB) per tali partizioni (proprio come fai per le partizioni vendor
e system
).
Per abilitare AVB, includere il flag di build BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS
. Per dettagli sulla configurazione di AVB su partizioni dinamiche, vedere Modifiche alla configurazione di AVB .
Trattare /odm come un'altra partizione /vendor
Per garantire che il sistema gestisca la partizione odm
come partizione vendor
, sostituire eventuali riferimenti vendor
codificati con un set di partizioni orientate all'hardware (attualmente odm
e vendor
). Posizioni di riferimento vendor
importanti nella piattaforma includono linker dinamico , gestore di pacchetti e shell/libc
.