Genel Çekirdek Görüntüsü (GKI) projesi

Android Ortak Çekirdekleri (ACK'ler) , tüm Android ürün çekirdeklerinin temelidir. Satıcı ve cihaz çekirdekleri, ACK'lerin akış aşağısındadır. Satıcılar, çekirdek kaynak kodunu değiştirerek ve aygıt sürücüleri ekleyerek SoC'ler ve çevre birimleri için destek ekler. Bu değişiklikler, bir aygıtta çalışan kodun %50'sinin ağaç dışı kod olduğu ve yukarı akış Linux'tan veya AOSP ortak çekirdeklerinden olmadığı noktaya kadar kapsamlı olabilir.

Böylece, bir aygıt çekirdeği şunlardan oluşur:

  • Upstream: kernel.org'dan Linux çekirdeği
  • AOSP: AOSP ortak çekirdeklerinden Android'e özgü ek yamalar
  • Satıcı: Satıcılardan SoC ve çevre birimi etkinleştirme ve optimizasyon yamaları
  • OEM/cihaz: Ek aygıt sürücüleri ve özelleştirmeler

Neredeyse her cihazın özel bir çekirdeği vardır. Bu çekirdek parçalanmasıdır.

Android çekirdek hiyerarşisi parçalanmaya yol açar

Şekil 1. Android çekirdek hiyerarşisi parçalanmaya yol açar

Parçalanma maliyetleri

Çekirdek parçalanmasının Android topluluğu üzerinde birkaç olumsuz etkisi vardır.

Güvenlik güncellemeleri emek yoğundur

Android Güvenlik Bülteni'nde (ASB) belirtilen güvenlik yamaları, cihaz çekirdeklerinin her birine geri aktarılmalıdır. Ancak, çekirdek parçalanması nedeniyle, güvenlik düzeltmelerini sahada Android cihazlara yaymak aşırı derecede pahalıdır.

Uzun Süreli Desteklenen güncellemeleri birleştirmek zor

Uzun Süreli Desteklenen (LTS) sürümler, güvenlik düzeltmelerini ve diğer kritik hata düzeltmelerini içerir. LTS sürümleriyle güncel kalmanın, güvenlik düzeltmeleri sağlamanın en etkili yolu olduğu kanıtlanmıştır. Pixel cihazlarda, ASB'de bildirilen çekirdek güvenlik sorunlarının %90'ının güncel kalan cihazlar için zaten giderildiği keşfedildi.

Ancak, aygıt çekirdeklerindeki tüm özel değişikliklerle, LTS düzeltmelerini aygıt çekirdekleriyle birleştirmek zordur.

Android platformu sürüm yükseltmelerini engeller

Parçalanma, alandaki cihazlara çekirdek değişikliklerinin eklenmesini gerektiren yeni Android özelliklerini zorlaştırıyor. Android Framework kodu, en fazla beş çekirdek sürümünün desteklendiğini ve yeni platform sürümü için hiçbir çekirdek değişikliği yapılmadığını varsaymalıdır (Android 10, bazı durumlarda henüz uygulanmamış olan 3.18, 4.4, 4.9, 4.14 ve 4.19 çekirdeklerini destekler). 2017'de Android 8'den bu yana yeni özelliklerle geliştirildi).

Yukarı akış Linux'a çekirdek değişikliklerine katkıda bulunmak zor

Çekirdeğe yapılan tüm değişikliklerle, çoğu amiral gemisi cihazı, zaten en az 18 aylık bir çekirdek sürümüyle birlikte gelir. Örneğin, 4.14 çekirdek, kernel.org tarafından 2017 yılının Kasım ayında piyasaya sürüldü ve 4.14 çekirdeği kullanan ilk Android telefonlar, 2019 baharında sevk edildi.

Yukarı akış çekirdek sürümü ve ürünler arasındaki bu uzun gecikme, Android topluluğunun gerekli özellikleri ve sürücüleri yukarı akış çekirdeklerine beslemesini zorlaştırıyor.

Parçalanmayı düzeltme: Genel Çekirdek Görüntüsü

Genel Çekirdek Görüntüsü (GKI) projesi , çekirdek çekirdeği birleştirerek ve SoC ve kart desteğini çekirdek çekirdekten yüklenebilir satıcı modüllerine taşıyarak çekirdek parçalanmasını ele alır. GKI ayrıca satıcı modülleri için kararlı bir Çekirdek Modül Arayüzü (KMI) sunar, böylece modüller ve çekirdek bağımsız olarak güncellenebilir. GKI çekirdeğinin bazı özellikleri şunlardır:

  • GKI çekirdeği, ACK kaynaklarından oluşturulmuştur.
  • GKI çekirdeği, LTS sürümüne göre mimari başına tek çekirdekli bir ikili artı ilişkili yüklenebilir modüllerdir (şu anda yalnızca android11-5.4 ve android12-5.4 için android12-5.4 ).
  • GKI çekirdeği, ilişkili ACK için desteklenen tüm Android Platform sürümleriyle test edilmiştir. Bir GKI çekirdek sürümünün kullanım ömrü boyunca hiçbir özelliğin kullanımdan kaldırılması yoktur.
  • GKI çekirdeği, belirli bir LTS içindeki sürücülere kararlı bir KMI sunar.
  • GKI çekirdeği, SoC'ye özgü veya panoya özgü kod içermez.

GKI mimarisinin bir görüntüsü için Çekirdeğe genel bakış bölümüne bakın.

GKI, Android 11 platform sürümündeki v5.4 çekirdeklerinden başlayarak birkaç aşamada ortaya çıkan karmaşık bir değişikliktir.

Şu anda iki GKI aşaması vardır:

  • GKI 1.0, 5.4 çekirdeğe sahip cihazlar için Android 11'de tanıtıldı. GKI 1.0, Android 12 veya Android T (AOSP deneysel) ile başlatılanlar da dahil olmak üzere, 5.4 çekirdekle gönderilen tüm cihazlar için geçerlidir.
  • GKI 2.0, Android 12'de 5.10 çekirdeğe sahip cihazlar için tanıtıldı ve 5.10 veya üzeri çekirdeklerle gelen tüm cihazlar için yeni standarttır.

GKI 1.0

GKI 1.0'da, çekirdek sürümü 5.4 ile başlatılan cihazların GKI testinden (Android 11 ve sonraki platform sürümleri) geçmesi gerekir. GKI 1.0 hedefleri şunları içerir:

  • Ürün çekirdeğini GKI çekirdeğiyle değiştirirken Satıcı Test Paketi'nde (VTS) veya Uyumluluk Testi Paketi'nde (CTS) gerilemelerden kaçının.
  • AOSP ortak çekirdekleri ile ortakların çekirdeklerini güncel tutma yükünü azaltın.
  • Yeni Android sürümleriyle yükseltilen ve başlatılan cihazlar için çekirdeklere temel Android değişikliklerini dahil edin.
  • Android kullanıcı alanını bozmayın.
  • Donanıma özgü bileşenleri, yüklenebilir modüller olarak çekirdek çekirdekten ayırın.

GKI 1.0 belgeleri için GKI 1.0 bölümüne bakın .

GKI 2.0

GKI 2.0'da, çekirdek sürümü 5.10 veya üzeri ile başlatılan cihazlar, GKI çekirdeği (Android 12'den itibaren) ile birlikte gönderilmelidir. İmzalı önyükleme görüntüleri mevcuttur ve LTS ve kritik hata düzeltmeleriyle düzenli olarak güncellenir. KMI için ikili kararlılık korunduğundan, bu önyükleme görüntülerini satıcı görüntülerinde değişiklik yapmadan yükleyebilirsiniz. GKI 2.0 hedefleri şunları içerir:

  • Ürün çekirdeğini GKI çekirdeğiyle değiştirirken önemli performans veya güç gerilemeleri uygulamayın.
  • Ortakların, satıcı müdahalesi olmadan çekirdek güvenlik düzeltmeleri ve hata düzeltmeleri sunmasına olanak sağlayın.
  • Cihazlar için ana çekirdek sürümünü güncelleme maliyetini azaltın (örneğin, v5.10'dan 2021 LTS çekirdeğine).
  • Yükseltme için net bir süreçle çekirdek sürümlerini güncelleyerek mimari başına tek bir GKI çekirdek ikili dosyasını koruyun.

GKI 2.0, Android çekirdeklerinin en güncel durumunu temsil eder. GKI 1.0 ve Önceki çekirdekler (<=4.19) alt bölümleri dışındaki çekirdek belgeleri, GKI 2.0 mimarisini yansıtır.