Birçok Android OEM'si, tedarikçi yığınları ekleme ve önbellek yönetimini özelleştirme gibi çeşitli nedenlerle ION çekirdek sürücüsünü değiştirir (bu değişikliklerle ilgili ayrıntılar için ION bellek ayırıcıyı entegre etme başlıklı makaleyi inceleyin). OEM'lerin Genel Çekirdek Görüntüsü'nü (GKI) kullanırken bu tür değişiklikleri muhafaza etmesini sağlamak için Android Ortak Çekirdeği 5.4 sürümü, temel ION sürücüsünü yerleşik durumda tutarken tedarikçiye özgü ION yığınlarını modülerleştirmeye yönelik bir çerçeve sunar. Aşağıdaki şekilde çekirdek görüntü düzeni gösterilmektedir.
Şekil 1. Modüler ION çekirdek sürücüsü
Modüler ION yığınlarının avantajları şunlardır:
- ION çekirdek sürücüsü, GKI görüntüsünün bir parçası olabilir. Böylece, cihazdan bağımsız tüm performans optimizasyonları ve hata düzeltmeleri tüm cihazlara ulaşabilir.
- Ortak çekirdekteki ION çekirdek sürücüsü, yığın kaydını işleyebilir ve kullanıcı alanı ile çekirdek istemcileri arasındaki arayüzü yönetebilir. Tedarikçi yığın modülleri yalnızca özel yığın işlemlerini uygulamak için gereklidir.
- ION çekirdek sürücüsü (GKI'nin bir parçası olarak), daha kolay bellek kullanımı izleme için kanca içerebilir. Bu, her OEM'nin kendi ION sürücüsünün bir versiyonuna sahip olduğunda mümkün değildi.
- Modüler tedarikçi ION yığınları, gelecekteki tüm geçişleri
dmabuf
yığınlarına daha kolay getirecektir.
Uygulama
ION yığın modülleri, temel ION sürücüsü tarafından kaydedilenleri geçersiz kılmak için kendi dmabuf
işlemlerini kaydedebilir. Temel ION sürücüsü tarafından desteklenmeyen bir dmabuf
işlemi (get_flags()
gibi), yığın uygulamasında gerekli geçersiz kılma işlemleri yoksa -EOPNOTSUPP
döndürür.
dmabuf
sürücüsü, performansı artırmak için kısmi önbellek bakımı gerçekleştirebilir (değişiklik listesi bölümüne bakın).
Çekirdek istemcileri, kısmi önbellek bakımı yapmak için dma_buf_begin_cpu_access_partial
ve dma_buf_end_cpu_access_partial
işlevlerini kullanabilir.
Android Ortak Çekirdeği, sistem modüler uygulamalarını ve yığın modülerleştirmesi için referans olarak kullanılacak bitişik bellek ayırıcı (CMA) yığınlarını içerir.
ION UAPI üstbilgisinde yapılan değişiklikler
ION kullanıcı alanı API (UAPI) başlığı, tedarikçi firma yığınları tarafından kullanılacak yığın kimlikleri aralığı tanımlamakta kullanılan bir ion_heap_id
sıralaması içerir.
/**
* 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ı istemcilerinin modüler yığınların kullanılıp kullanılmadığını belirlemesine de yardımcı olabilir.
Genel sistem yığınını geçersiz kılma
ION sistem yığını, genel/cihazdan bağımsız bir yığına erişmesi gereken tüm özelliklerin varlığına bağlı olmasını sağlamak için yerleşik olarak GKI resminin bir parçasıdır. Bu nedenle, ION_HEAP_SYSTEM
yığın kimliğini geçersiz kılamazsınız. Özelleştirilmiş bir sistem yığını oluşturmak için özel aralıkta (ION_HEAP_CUSTOM_START
ila ION_HEAP_CUSTOM_END
) bir yığın kimliği kullanarak tahsis gerçekleştirin.