Heap di ioni modulari per GKI

Molti Android OEM modificare il driver del kernel ION per vari motivi, come ad esempio l'aggiunta di cumuli vendor e personalizzazione di gestione della cache (per i dettagli su queste modifiche, fare riferimento alla integrazione della memoria allocatore ION ). Per consentire agli OEM di mantenere tali modifiche quando si usa il kernel generico immagine (GKI) , Android Common Kernel V5.4 introduce un quadro per modularizzando vendor-specifici cumuli ION mantenendo il motore principale ione integrata. La figura seguente mostra il layout dell'immagine kernel .

Cumuli di ioni modulari

Driver del kernel Figura 1. Modularized ION

Gli heap ION modulari presentano i seguenti vantaggi.

  • Il core driver ION può essere parte dell'immagine GKI, consentendo a tutte le ottimizzazioni delle prestazioni e alle correzioni di bug indipendenti dal dispositivo di raggiungere tutti i dispositivi.
  • Il driver principale ION nel kernel comune può gestire la registrazione dell'heap e gestire l'interfaccia per lo spazio utente e i client del kernel. I moduli heap del fornitore sono necessari solo per implementare le operazioni heap personalizzate.
  • Il driver core ION (come parte del GKI) può includere hook per un più facile monitoraggio dell'utilizzo della memoria, cosa che non era possibile quando ogni OEM aveva la propria versione del driver ION.
  • Vendor modulari cumuli ION dovrebbero apportare transizioni future di dmabuf cumuli più facile.

Attuazione

Moduli ION mucchio possono registrare i propri dmabuf operazioni per sostituire quelli registrati dal conducente nucleo ION. Un dmabuf operazione (come get_flags() ) non supportata dal nucleo ION driver restituisce il -EOPNOTSUPP se l'implementazione mucchio manca delle sostituzioni necessarie.

Per migliorare le prestazioni, il dmabuf guidatore può eseguire la manutenzione della cache parziale (vedi changelist ). Client kernel possono utilizzare i dma_buf_begin_cpu_access_partial e dma_buf_end_cpu_access_partial funzioni per eseguire la manutenzione della cache parziale.

Android Common Kernel contiene implementazioni modulari del sistema e heap di allocatori di memoria contigui (CMA) da utilizzare come riferimento per la modularizzazione di heap.

Modifiche all'intestazione ION UAPI

Lo spazio utente ION API (UAPI) intestazione contiene un ion_heap_id enum per uso nel definire un intervallo di ID mucchio per uso da cumuli fornitore.

 /**
 * ion_heap_id - list of heap IDs that Android can use
 *
 * @ION_HEAP_SYSTEM        ID for the ION_HEAP_TYPE_SYSTEM
 * @ION_HEAP_DMA_START     Start of reserved ID range for heaps of type ION_HEAP_TYPE_DMA
 * @ION_HEAP_DMA_END       End of reserved ID range for heaps of type ION_HEAP_TYPE_DMA
 * @ION_HEAP_CUSTOM_START  Start of reserved ID range for heaps of custom type
 * @ION_HEAP_CUSTOM_END    End of reserved ID range for heaps of custom type
 */

enum ion_heap_id {

   ION_HEAP_SYSTEM = (1 << ION_HEAP_TYPE_SYSTEM),

   ION_HEAP_DMA_START = (ION_HEAP_SYSTEM << 1),

   ION_HEAP_DMA_END = (ION_HEAP_DMA_START << 7),
   ION_HEAP_CUSTOM_START = (ION_HEAP_DMA_END << 1),

   ION_HEAP_CUSTOM_END = (ION_HEAP_CUSTOM_START << 22),
};

Inoltre, un nuovo IOCTL ( ION_IOC_ABI_VERSION ) può aiutare i clienti spazio utente determinare se vengono utilizzati cumuli modulari.

Sovrascrivere l'heap di sistema generico

L'heap del sistema ION è integrato e fa parte dell'immagine GKI per garantire che qualsiasi funzionalità che richiede l'accesso a un heap generico/indipendente dal dispositivo possa dipendere dalla sua esistenza. In quanto tale, non si può ignorare l'ID mucchio di ION_HEAP_SYSTEM . Per creare un mucchio sistema personalizzato, utilizzare un ID mucchio nel campo personalizzato ( ION_HEAP_CUSTOM_START a ION_HEAP_CUSTOM_END ) per eseguire le allocazioni.