Partizioni ODM

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.

Mantenimento dell'ABI tra le partizioni
Figura 1. Mantenimento dell'ABI tra le partizioni
  • Non c'è stabilità ABI tra le partizioni odm e vendor . Entrambe le partizioni devono essere aggiornate contemporaneamente.
  • 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 è lo stesso dell'ABI tra vendor e system .

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 e BOARD_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 in PRODUCT_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 in Android.bp
  • LOCAL_ODM_MODULE := true in Android.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 .