Birçok Android OEM, ION çekirdek sürücüsünü çeşitli nedenlerle değiştirir. Örneğin: satıcı yığınlarını ekleme ve önbellek yönetimini özelleştirme (bununla ilgili ayrıntılı bilgi daha fazla bilgi için ION belleğini entegre etme ayırıcı) olduğunu unutmayın. OEM'lerin aşağıdakileri yapmasına izin vermek için: Genel Çekirdek Görüntüyü kullanırken bu tür (GKI), Android Common Kernel v5.4, satıcıya özgü ION'ı modüler hale getirmek için bir çerçeve sunuyor yığınlar oluşturur. Aşağıdaki şekilde gösterilen Çekirdek görüntüsü düzenine sahiptir.
Şekil 1. Modülerleştirilmiş ION çekirdek sürücüsü
Modüler ION yığınları aşağıdaki avantajlara sahiptir.
- ION temel sürücüsü, GKI görüntüsünün bir parçası olabilir ve tüm erişmek için cihazdan bağımsız performans optimizasyonları ve hata düzeltmeleri cihazlar.
- Ortak çekirdekteki ION çekirdek sürücüsü, yığın kaydını yönetebilir ve kullanıcı alanı ve çekirdek istemcilerinin arayüzünü yönetmek için kullanır. Tedarikçi yığını modülleri yalnızca özel yığın işlemlerini uygulamak için gereklidir.
- ION çekirdek sürücüsü (GKI'nın bir parçası olarak) daha kolay bellek için kancalar içerebilir Bu imkan, her OEM kendi sürümüne sahip olduğunda mümkün değildi. ION sürücüsü.
- Modüler tedarikçi ION yığınları, gelecekteki tüm geçişleri
dmabuf
yığınlarına yapmalıdır. daha kolay olur.
Uygulama
ION yığın modülleri, kendi dmabuf
işlemlerini kaydederek bunları geçersiz kılabilir
çekirdek ION sürücüsü tarafından kaydedildi. dmabuf
işlemi (ör. get_flags()
)
temel ION sürücüsü tarafından desteklenmeyen bir -EOPNOTSUPP
gerekli geçersiz kılmalara sahip olmadığını
fark ediyor.
dmabuf
sürücüsü, performansı artırmak için kısmi önbellek gerçekleştirebilir.
(bkz.
değişiklik listesi) belirtin.
Kernel istemcileri, dma_buf_begin_cpu_access_partial
ve
Kısmi önbellek bakımı gerçekleştirmek için dma_buf_end_cpu_access_partial
işlevleri.
Android Common Kernel'da sistemin modüler uygulamalarını ve yığın için referans olarak kullanılacak bitişik bellek ayırıcı (CMA) yığınları bir yöntem de var.
ION UAPI başlığındaki değişiklikler
ION kullanıcı alanı API (UAPI) başlığı, şurada kullanılmak üzere bir ion_heap_id
sıralaması içerir:
tedarikçi firma yığınları tarafından kullanılacak bir dizi yığın kimliği tanımlamalıdır.
/**
* 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),
};
Ayrıca, yeni bir IOCTL
(ION_IOC_ABI_VERSION
), kullanıcı alanı istemcilerine yardımcı olabilir
kullanılıp kullanılmadığını belirler.
Genel sistem yığınını geçersiz kılma
ION sistem yığını yerleşiktir ve GKI görüntüsünün bir parçasıdır.
işlevi, genel/cihazdan bağımsız yığına erişmesi gereken
varlık. Bu nedenle, ION_HEAP_SYSTEM
yığın kimliğini geçersiz kılamazsınız. Alıcı:
özelleştirilmiş bir sistem yığını oluşturma, özel aralıktaki yığın kimliği kullanma
ayırmalar gerçekleştirmek için (ION_HEAP_CUSTOM_START
- ION_HEAP_CUSTOM_END
).