Android'de ortak çekirdekler

AOSP ortak çekirdekleri (Android ortak çekirdekleri veya ACK'ler olarak da bilinir), kernel.org çekirdeklerinin aşağı akışındadır ve ana hatta veya uzun süreli desteklenen (LTS) çekirdeklere birleştirilmemiş, Android topluluğunun ilgisini çeken yamaları içerir. Bu yamalar şunları içerebilir:

  • Android özelliklerinin gerektirdiği yukarı akış işlevlerinin geri bağlantıları ve seçici birleştirme işlemleri
  • Android cihazlarda kullanıma hazır olan ancak upstream'de hâlâ geliştirme aşamasında olan özellikler
  • Diğer ekosistem iş ortakları için faydalı olan tedarikçi/OEM özellikleri

android-mainline, Android özelliklerinin birincil geliştirme dalıdır. Linux ana hattı, Linus Torvalds bir yayın veya yayın adayı yayınladığında android-mainline ile birleştirilir. 2019'dan önce Android ortak çekirdekleri, kısa süre önce duyurulan LTS çekirdeği klonlanarak ve Android'e özel yamalar eklenerek oluşturuluyordu. Bu işlem, 2019'da yeni Android common çekirdeğini android-mainline'dan ayırmak için değiştirildi. Bu yeni model, aynı sonucu kademeli olarak elde ederek Android yamalarını ileriye taşıma ve test etme konusunda önemli bir çaba gerektirmeyi önler. android-mainline sürekli olarak önemli testlerden geçtiği için bu model, yayınlandığı günden itibaren yüksek kaliteli bir çekirdek içerir.

Yukarı akışta yeni bir LTS ilan edildiğinde, ilgili ortak çekirdek android-mainline'dan dallandırılır. Bu sayede iş ortakları, android-mainline ile birleştirme yaparak LTS sürümü bildirilmeden önce projeye başlayabilir. Yeni ortak çekirdek dalı oluşturulduktan sonra iş ortakları birleştirme kaynağını sorunsuz bir şekilde yeni dala değiştirebilir.

Diğer yaygın çekirdek dalları, ilişkili LTS çekirdeğinden düzenli olarak birleştirme alır. Bu birleştirme işlemleri genellikle LTS sürümü yayınlandıktan hemen sonra yapılır. Örneğin, Linux 6.1.75 yayınlandığında 6.1 ortak çekirdeğiyle (android14-6.1) birleştirildi. İş ortaklarının, LTS ve Android'e özgü hata düzeltmeleriyle güncel kalmak için çekirdeklerini güncellemeleri önemle tavsiye edilir.

ACK KMI çekirdek dalı

GKI çekirdekleri, kararlı bir çekirdek modülü arayüzüne sahiptir. KMI, çekirdek sürümü ve Android platform sürümüyle benzersiz bir şekilde tanımlanır. Bu nedenle, dallar ANDROID_RELEASE-KERNEL_VERSION olarak adlandırılır. Örneğin, Android 14 için 6.1 GKI çekirdeği android14-6.1 olarak adlandırılır. Android 15'te GKI çekirdeği android15-6.6 kullanıma sunuldu.

Özellik ve lansman çekirdekleri

Android 15'ten önce, cihaz lansmanı için en son üç çekirdekten herhangi biri kullanılabilirdi. Android 15'ten itibaren, cihaz lansmanı için en son iki çekirdek sürümü kullanılabilir. Android 15 için başlatma çekirdekleri android15-6.6 ve android14-6.1'dir.

Platform sürümü güncellenirken çekirdek yükseltmeleri gerekmediğinden, platform sürümünün en yeni özelliklerini içermeyen çekirdekler cihazları başlatmak için kullanılabilir. Bu nedenle, android14-6.1 gibi Android 14 için tasarlanmış çekirdekler, platform sürümü Android 15'e yükseltildikten sonra bile cihazlarda kullanılabilir.

Android platform sürümü Başlatma çekirdekleri Özellik çekirdekleri
Android 16 (2025) android16-6.12
android15-6.6
android16-6.12
Android 15 (2024) android15-6.6
android14-6.1
android15-6.6
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android14-6.1
android14-5.15
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android13-5.15
android13-5.10
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4
android12-5.10
android12-5.4

1 İlişkili BSP, platform sürümü için güncellendiyse ek kısıtlamalar uygulanabilir. Ayrıntılar için Vendor Interface Object - match kernel branches (Tedarikçi Arayüzü Nesnesi - eşleşen çekirdek dalları) konusuna bakın.

Ortak çekirdek hiyerarşisi

android-mainline'dan dal oluşturma

Ortak çekirdek hiyerarşisinin en üst düzeyi Şekil 1'de gösterilmektedir.

android-mainline çekirdeğinden ortak çekirdekler oluşturma

1.şekil android-mainline çekirdeğinden ortak çekirdekler oluşturma

2022'de android14-6.1 dalından yeni bir Android ortak çekirdeğinin android-mainline oluşturulduğunu unutmayın. 2023'te sonraki LTS ilan edildiğinde, android15-6.6, android-mainline'den ayrıldı.

Şekil 1'de gösterildiği gibi, her çekirdek sürümü iki GKI çekirdeğinin temeli olabilir. Örneğin, iki v5.15 çekirdeği android13-5.15 ve android14-5.15'dir. Her ikisi de kendi platform sürümleri için özellik çekirdekleridir. Bu durum 5.10 için de geçerliydi. LTS ilan edildiğinde android12-5.10 oluşturuldu ve android13-5.10, Android 13'teki özelliklerin geliştirilmesine olanak tanımak için 2021 İlkbaharında çekirdek özelliklerinin tamamlandığı dönüm noktasında android12-5.10'dan ayrıldı. Android 15 (2024) sürümünden itibaren, çekirdek sürümü başına yalnızca bir yeni GKI çekirdeği (android15-6.1 çekirdeği yoktur) bulunur.

ACK KMI dalının yaşam döngüsü

ACK KMI dalının yaşam döngüsü Şekil 2'de gösterilmektedir.

6.6 ACK KMI dalının yaşam döngüsü

Şekil 2. 6.6 ACK KMI dalının yaşam döngüsü

Geliştirme sürecini ve dal yaşam döngüsünü netleştirmek için Şekil 2'de 6.6 sürümüne ait ACK KMI dallarına odaklanılmıştır.

Her ACK KMI dalı, Şekil 2'de her daldaki farklı renklerle gösterilen üç aşamadan geçer. Gösterildiği gibi, LTS aşamadan bağımsız olarak düzenli şekilde birleştirilir.

Geliştirme aşaması

Oluşturulduğunda, ACK KMI dalı geliştirme aşamasına girer (Şekil 2'de dev olarak etiketlenir) ve bir sonraki Android platform sürümünde özellik katkılarına açıktır. Şekil 2'de, 6.6 yeni yukarı akış LTS çekirdeği olarak ilan edildiğinde android15-6.6 oluşturuldu.

Sabitleme aşaması

ACK KMI dalı, özellik tamamlandı olarak ilan edildiğinde stabilizasyon aşamasına girer (Şekil 2'de kararlı olarak etiketlenir). İş ortağı özellikleri ve hata düzeltmeleri kabul edilmeye devam eder ancak arayüzü etkileyen değişiklikleri tespit etmek için KMI izleme etkinleştirilir. Bu aşamada, KMI'de zarar veren değişiklikler kabul edilir ve KMI tanımı önceden tanımlanmış bir sıklıkta (genellikle iki haftada bir) güncellenir. KMI izlemeyle ilgili ayrıntılar için GKI'ya genel bakış başlıklı makaleyi inceleyin.

KMI dondurulmuş aşaması

Yeni bir platform sürümü AOSP'ye gönderilmeden önce ACK KMI dalı dondurulur ve dalın kullanım ömrü boyunca dondurulmuş olarak kalır. Bu nedenle, kararlı KMI'yi etkilemeden azaltılamayan ciddi bir güvenlik sorunu tespit edilmediği sürece KMI'yi bozan değişiklikler kabul edilmez. KMI bozulmalarını önlemek için, LTS'den birleştirilen bazı yamalar, düzeltme Android cihazlar için gerekli değilse değiştirilebilir veya bırakılabilir.

Bir ACK KMI dalı dondurulduğunda, mevcut KMI ortak çekirdeği bozulmadığı sürece hata düzeltmeleri ve iş ortağı özellikleri kabul edilebilir. Mevcut KMI'yi oluşturan arayüzler etkilenmediği sürece KMI, yeni dışa aktarılan sembollerle genişletilebilir. KMI'ye yeni arayüzler eklendiğinde bu arayüzler hemen kararlı hale gelir ve gelecekteki değişikliklerle bozulamaz.

Örneğin, ortak çekirdekli bir KMI arayüzü tarafından kullanılan bir yapıya alan ekleyen bir değişiklik, arayüz tanımını değiştirdiği için izin verilmez:

struct foo {
  int original_field1;
  int original_field2;
  int new_field;  // Not allowed
};

int do_foo(struct foo &myarg)
{
  do_stuff(myarg);
}
EXPORT_SYMBOL_GPL(do_foo);

Ancak yeni bir işlev ekleyebilirsiniz:

struct foo2 {
  struct foo orig_foo;
  int new_field;
};

int do_foo2(struct foo2 &myarg)
{
  do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);

GKI çekirdeğinin kullanım ömrü boyunca, çekirdeğin cihazın piyasaya sürüldüğü Android platformu sürümünde güvenli bir şekilde kullanılabilmesi için kullanıcı alanıyla geriye dönük uyumluluk korunur. Önceki sürümlerle sürekli test, uyumluluğu korur. Bu nedenle, Şekil 2'de android15-6.6 çekirdek, Android 15 ve sonraki sürümleri çalıştıran cihazlarda kullanılabilir. Android platform sürümü önceki sürümlerle de uyumlu olduğundan, android14-6.1 çekirdeği, Android 15 cihazlarda lansman veya yükseltme için kullanılabilir.

KMI oluşturma numarası

Kararlılık aşamasında bir LTS birleştirme işlemi yapılırsa veya bundan sonra KMI'nin değiştirilmesini gerektiren bir güvenlik sorunu ya da başka bir etkinlik olursa build.config.common içinde kaydedilen KMI oluşturma numarası artırılır. Mevcut KMI neslini uname komutunu kullanarak bulabilirsiniz:

$ uname -r
6.6.30-android15-6-g86d10b30f51f

Platform sürümünden sonraki sayı, KMI neslidir (bu örnekte 6).

KMI oluşturma işlemi değişirse çekirdek, önceki KMI oluşturma işlemine uygun satıcı modülleriyle uyumlu olmaz. Bu nedenle, modüllerin yeniden oluşturulması ve çekirdekle eşzamanlı olarak güncellenmesi gerekir. KMI dondurulduktan sonra KMI oluşturma değişikliklerinin çok nadir olması beklenir.

Çekirdekler arasındaki uyumluluk

Aynı LTS ailesindeki çekirdekler arasındaki uyumluluk koşulları, yeni GKI çekirdekleriyle birlikte değişiyor.

GKI çekirdekleri

GKI çekirdekleri, çekirdek sürümünü destekleyen tüm Android platform sürümleriyle geriye dönük uyumluluğu korur. Ayrıca, Android platformu sürümleri, önceki sürümlerdeki GKI çekirdekleriyle geriye dönük olarak uyumludur. Bu nedenle, Android 15 (2024) çalıştıran cihazlarda Android 14 (2023) için geliştirilen android14-6.1 çekirdeğini güvenle kullanabilirsiniz. Uyumluluk, GKI çekirdeklerinin desteklenen tüm sürümlerle sürekli VTS ve CTS testiyle doğrulanır.

KMI, çekirdek modüllerinin satıcı görüntüsünde yeniden oluşturulmasını gerektirmeden çekirdeğin güncellenebilmesi için kararlıdır.

KMI uyumluluğu, farklı GKI çekirdekleri arasında korunmaz. Bu nedenle, örneğin, tüm modüller yeniden oluşturulmadan android14-6.1 çekirdeği android15-6.6 çekirdeğiyle değiştirilemez.

GKI çekirdekleri yalnızca ilk ve sonraki sürümlerinde desteklenir. Eski sürümlerde desteklenmez. Bu nedenle, Android 14 (2023) çalıştıran cihazlarda android15-6.6 çekirdeği desteklenmez.

Uyumluluk matrisi

Bu tabloda, her Android platform sürümünde desteklenen ve test edilen çekirdek sürümleri gösterilmektedir.

Android platform sürümü Desteklenen çekirdekler
Android 16 (2025) android16-6.12
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 15 (2024) android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4

Destek ömrü ve güvenlik yamaları

ACK'ler, yukarı akıştan LTS birleştirmeleri ve Android'e özgü kod için hata düzeltmeleri alır. Bu düzeltmeler, aylık Android Güvenlik Bültenleri'nde belirtilen ve ACK ile ilgili tüm çekirdek güvenlik yamalarını içerir.

ACK'ler, kernel.org adresindeki karşılık gelen yukarı akış kararlı çekirdeğinden daha uzun süre desteklenebilir. Bu durumda Google, bu bölümde gösterilen kullanım ömrü sonu (EOL) tarihine kadar genişletilmiş destek sağlar. Destek sonu (EOL) durumuna gelen çekirdekler artık Google tarafından desteklenmez ve bu çekirdeklerin çalıştığı cihazlar güvenlik açığına sahip olarak kabul edilir.

Çekirdek 6.6'dan itibaren kararlı çekirdeklerin destek ömrü 4 yıldır.

Bu tabloda, desteklenen ACK'lerin kullanım ömürleri gösterilmektedir:

ACK dalı Lansman
tarihi
Destek
ömrü
(yıl)
EOL
android11-5.4 2019-11-24 6 2026-01-01
android12-5.4 2019-11-24 6 2026-01-01
android12-5.10 2020-12-13 6 2027-07-01
android13-5.10 2020-12-13 6 2027-07-01
android13-5.15 2021-10-31 6 2028-07-01
android14-5.15 2021-10-31 6 2028-07-01
android14-6.1 2022-12-11 6 2029-07-01
android15-6.6 2023-10-29 4 2028-07-01
android16-6.12 2024-11-17 4 2029-07-01

Ortak çekirdek testi

Ortak çekirdekler, satıcılar tarafından yapılan aşağı akış testlerine ek olarak çeşitli CI sistemleriyle test edilir.

Linux çekirdeği işlevsel testi

Linux Kernel Functional Test (LKFT) testleri, bir dizi fiziksel arm32 ve arm64 cihazda kselftest, LTP, VTS ve CTS dahil olmak üzere çeşitli test paketlerini başlatır. En son test sonuçlarını android-lkft sayfasında bulabilirsiniz.

KernelCI testi

KernelCI derleme ve başlatma testleri, ortak bir çekirdek dalına yeni bir yama gönderildiğinde başlatılır. Çeşitli kartlarda birkaç yüz derleme yapılandırması test edilir ve başlatılır. Android çekirdekleriyle ilgili son sonuçları KernelCL sitesinde bulabilirsiniz.

Android'de gönderme öncesi ve sonrası testler

Gönderme öncesi testler, hataların Android ortak çekirdeklerine eklenmesini önlemek için kullanılır. Test sonucu özeti, Android common kernel gerrit'teki kod değişikliğinin "Checks" (Kontroller) sekmesinde bulunabilir.

Android'de gönderme sonrası testler, ci.android.com'daki Android ortak çekirdek dalına yeni yamalar gönderildiğinde Android ortak çekirdek dallarında yayınlanan yeni derlemelerde gerçekleştirilir. ci.android.com'da kısmi dal adı olarak aosp_kernel girerek sonuçların bulunduğu çekirdek dallarının listesini görebilirsiniz. Örneğin, android-mainline ile ilgili sonuçları Android sürekli derleme entegrasyonu (Android CI) kontrol panelinde bulabilirsiniz. Test durumunu Test Results sekmesinde bulmak için belirli bir derlemeyi tıklayın.

Android platform kaynak ağacında test grubu kernel-presubmit ile test eşleme tarafından tanımlanan testler, Android çekirdek dalları için gönderme öncesi test olarak çalıştırılır. Örneğin, test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING konumundaki aşağıdaki yapılandırma, Android ortak çekirdek kodu check-in'inde ön gönderme testi olarak vts_kernel_proc_file_api_test öğesini etkinleştirir.

{
  "kernel-presubmit": [
    {
      "name": "vts_kernel_proc_file_api_test"
    }
  ]
}

0 günlük test

0 günlük test, yeni yamalar gönderildiğinde tüm Android ortak çekirdek dallarında yama yama test gerçekleştirir. Çeşitli önyükleme, işlevsel ve performans testleri çalıştırılır. Herkese açık cros-kernel-buildreports grubuna katılın.

Test matrisi

Android ortak çekirdeği Android platformu sürümleri Test paketleri
Ana 16 15 14 13 12 LKFT KernelCI Göndermeden Önce Gönderme sonrası 0-day
android-mainline
android16-6.12
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4

Android ortak çekirdeklerine katkıda bulunma

Genel olarak özellik geliştirme, Android ortak çekirdeklerinde değil, ana Linux'ta yapılmalıdır. Yukarı akış geliştirme şiddetle tavsiye edilir. Geliştirme kabul edildikten sonra gerekirse belirli ACK dalına geri aktarılabilir. Android Kernel Team, Android ekosisteminin yararı için yukarı akış çalışmalarını desteklemekten memnuniyet duyar.

Gerrit'e yamalar gönderin ve bu katkı yönergelerine uyun.