Partizioni ODM

Android 10 include il supporto per lo sviluppo odm partizioni utilizzando il sistema di build Android.

Informazioni sulle partizioni ODM

I produttori di design originali (ODM) personalizzano il fornitore SoC (System-on-Chip) board-support pack (BSP) ai loro dispositivi specifici (le loro schede). Questo consente di implementare moduli kernel per componenti specifici della scheda, daemon specifici per le board o le loro caratteristiche sui livelli di astrazione hardware (HAL). Potrebbe anche voler sostituire o personalizzare i componenti del SoC.

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

Utilizza partizioni del prodotto e ODM

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

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

L'uso di partizioni separate presenta degli svantaggi, come la difficoltà di gestione spazio su disco (ad esempio, devi riservare una quantità limitata di spazio per crescita). Tuttavia, Android 10 supporta partizioni dinamiche rimuove il problema del disco ed esegue il partizionamento di un dispositivo Possibile aggiornamento over-the-air (OTA).

Componenti ODM

La partizione odm contiene i seguenti componenti specifici per ODM (simile alla partizione vendor), elencata nella tabella seguente.

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

Nessuna immagine personalizzata

Non utilizzare personalizzato immagini perché non supportano:

  • Installazione di un modulo in 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 build.
  • Ben fatto. Non è possibile creare custom_images utilizzando il sistema di compilazione soong.
  • Aggiornamento OTA. Le immagini personalizzate vengono utilizzate immagini ROM di fabbrica che non possono essere pubblicate tramite OTA.

Mantieni le ABI tra le partizioni

La partizione odm è un'estensione di vendor della partizione di testo. Quando valuti la stabilità dell'interfaccia binaria dell'applicazione (ABI), tieni la seguente architettura.

Mantenimento dell'ABI tra le partizioni

Figura 1. Mantenimento dell'ABI tra le partizioni.

  • Nessuna stabilità ABI tra odm e vendor partizioni. L'upgrade di entrambe le partizioni deve essere eseguito con lo stesso nel tempo.
  • Le partizioni odm e vendor possono dipendere ma la partizione vendor deve funzionare senza una partizione odm.
  • L'ABI tra odm e system è uguale a l'ABI tra il giorno vendor e il giorno system.

Interazione diretta tra la partizione product e la La partizione vendor o odm non è consentito. (questa operazione viene applicata da SEpolicy).

Implementare le partizioni ODM

Prima di implementare una nuova partizione, esamina il AOSP correlato modifiche.

Configura le partizioni ODM

Per configurare odm partizioni, 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 un partizione dinamica dimensioni
  • Tipo di file system BOARD_ODMIMAGE_FILE_SYSTEM_TYPE utilizzato per Immagine ODM
  • PRODUCT_ODM_PROPERTIES per /odm/build.prop per da utilizzare in $(call inherit-product path/to/device.mk), ad esempio PRODUCT_ODM_PROPERTIES += product.abc=ok

Installare un modulo su una partizione ODM

Usa 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

Abilita Avvio verificato

Per impedire a software dannoso di manomettere le partizioni di odm, attiva Avvio verificato di Android (AVB) per queste partizioni (come fai per vendor e system partizioni).

Per abilitare AVB, includi il flag di build BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS. Per maggiori dettagli sulla configurazione AVB sulle partizioni dinamiche; vedi Configurazione AVB modifiche.

Considerare /odm come un'altra partizione /fornitore

Per assicurarti che il sistema gestisca la partizione odm come partizione vendor, sostituisci eventuali vendor hardcoded con un set di partizioni orientate all'hardware (attualmente odm e vendor). Rilevante vendor posizioni di riferimento all'interno della piattaforma dinamico linker, pacchetto gestore e shell/libc.