Android'in yaygın çekirdekleri

AOSP ortak çekirdekleri (Android ortak çekirdekleri veya ACK'lar olarak da bilinir), kernel.org çekirdeklerinin aşağı akışıdır ve Android topluluğunun ilgisini çeken ancak ana hat veya Uzun Vadeli Destekli (LTS) çekirdekleriyle birleştirilmemiş yamalar içerir. Bu yamalar şunları içerebilir:

  • Android özellikleri için gereken yayın öncesi işlevlerin geri taşımaları ve seçkinleri
  • Android cihazlar için hazır olan ancak henüz geliştirme aşamasında olan özellikler
  • Diğer ekosistem iş ortakları için yararlı olan tedarikçi/OEM özellikleri

android-mainline, Android özellikleri için birincil geliştirme dalıdır. Linus Torvalds sürüm veya yayın adayı yayınladığında Linux satır içi android-mainline ile birleştirilir. 2019'dan önce Android ortak çekirdekleri, kısa süre önce açıklanan LTS çekirdeği klonlanarak ve Android'e özel yamalar eklenerek oluşturuluyordu. Bu süreç, 2019'da yeni Android ortak çekirdeğini android-mainline'ten ayırmak için değiştirildi. Bu yeni model, aynı sonucu kademeli olarak elde ederek Android yamalarını aktarma ve test etmeyle ilgili önemli çabayı önler. android-mainline önemli ölçüde sürekli testten geçer. Bu model, yayınlandığı günden itibaren yüksek kaliteli bir çekirdek sağlar.

Yeni bir LTS yayın öncesi olarak ilan edildiğinde, ilgili ortak çekirdek android-mainline'ten ayrılır. Bu sayede iş ortakları, LTS sürümü açıklanmadan önce android-mainline'den birleştirme yaparak projeye başlayabilir. Yeni ortak çekirdek dalı oluşturulduktan sonra iş ortakları, birleştirme kaynağını sorunsuz bir şekilde yeni dalla değiştirebilir.

Diğer yaygın çekirdek dalları, ilişkili LTS çekirdeğinden düzenli 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 bu sürüm 6.1 ortak çekirdeğinde (android14-6.1) birleştirilmiştir. İş ortaklarının, LTS ve Android'e özgü hata düzeltmeleriyle ilgili güncellemeleri kaçırmamak için çekirdeklerini güncellemeleri kesinlikle önerilir.

ACK KMI çekirdek dalı

GKI çekirdeklerinin kararlı bir çekirdek modülü arayüzü vardır. KMI, çekirdek sürümü ve Android platformu 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 için GKI çekirdeği android15-6.6 kullanıma sunuldu.

Çekirdekleri öne çıkarma ve başlatma

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'in başlatma çekirdekleri android15-6.6 ve android14-6.1'tir.

Platform sürümü güncellenirken çekirdek yükseltmeleri gerekli olmadığından, platform sürümünün en son özelliklerinin eksik olduğu çekirdekler cihazları kullanıma sunmak için yine kullanılabilir. Bu nedenle, Android 14 için tasarlanmış android14-6.1 gibi çekirdekler, platform sürümü Android 15'e yükseltildikten sonra bile cihazlarda kullanılabilir.

Android platform sürümü Çekirdek başlatma Özellik çekirdekleri
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
android-4.19-stable
android12-5.10
android12-5.4
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

1 İlişkili BSP, platform sürümü için güncellendiyse ek kısıtlamalar geçerli olabilir. Daha genel anlamda, çekirdeğin Android Sürüm numarası hedef FCM sürümünden büyük veya bu sürüme eşit olmalıdır. Ayrıntılar için Tedarikçi Arayüzü Nesnesi - çekirdek dallarını eşleme bölümüne bakın.

Ortak çekirdek hiyerarşisi

android-mainline dalından

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

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

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

2022'de android-mainline'den yeni bir Android ortak çekirdeği android14-6.1 dalının ayrıldığını unutmayın. 2023'te, bir sonraki LTS açıklandığında android15-6.6, android-mainline'ten ayrıldı.

Şekil 1'de gösterildiği gibi, her çekirdek sürümü iki GKI çekirdeğinin temeli olabilir. Örneğin, v5.15 sürümünün iki çekirdeği android13-5.15 ve android14-5.15'tır. Bunların her ikisi de ilgili platform sürümlerinin özellik çekirdekleridir. 5.10 için de durum böyleydi; LTS ilan edildiğinde android12-5.10 oluşturuldu ve Android 13'e yönelik özelliklerin geliştirilmesine izin vermek için android13-5.10, 2021'in ilkbaharında çekirdek özellik tamamlanma aşamasında android12-5.10'ten ayrıldı. Android 15'ten (2024) itibaren, çekirdek sürümü başına yalnızca bir yeni GKI çekirdeği vardır (android15-6.1 çekirdeği yoktur).

ACK KMI şubesinin yaşam döngüsü

ACK KMI şubesinin yaşam döngüsü aşağıda Şekil 2'de gösterilmiştir.

6.6 ACK KMI şube yaşam döngüsü

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

Geliştirme sürecini ve dal yaşam döngüsünü açıklamak için Şekil 2'de 6.6 için ACK KMI dalları ele alınmıştır.

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

Geliştirme aşaması

Oluşturulan ACK KMI dalı geliştirme aşamasına (Şekil 2'de dev olarak etiketlenmiştir) girer ve sonraki Android platform sürümüne özellik katkıları için açıktır. Şekil 2'de, 6.6 yeni yayın LTS çekirdeği olarak ilan edildiğinde android15-6.6 oluşturulmuştur.

İstikrar aşaması

ACK KMI şubesi özellik açısından tamamlanmış olarak ilan edildiğinde istikrara kavuşturma aşamasına (Şekil 2'de kararlı olarak etiketlenmiştir) girer. İş 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'yi bozan değişiklikler kabul edilir ve KMI tanımı önceden tanımlanmış bir tempoda (normalde iki haftada bir) güncellenir. KMI izlemeyle ilgili ayrıntılar için GKI'ye genel bakış başlıklı makaleyi inceleyin.

KMI donduruldu safha

Yeni bir platform sürümü AOSP'ye aktarılmadan önce ACK KMI dalı dondurulur ve dalın kullanım ömrü boyunca donmuş halde kalır. Bu, kararlı KMI'yı etkilemeden azaltılamayan ciddi bir güvenlik sorunu tespit edilmedikçe KMI'yı bozan değişikliklerin kabul edilmediği anlamına gelir. KMI kesintilerini önlemek için, LTS'den birleştirilen bazı yamalar, Android cihazlar için gerekli olmayan düzeltmeler varsa değiştirilebilir veya kaldırılabilir.

Bir ACK KMI şubesi 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, dışa aktarılan yeni simgelerle genişletilebilir. KMI'ya eklenen yeni arayüzler hemen kararlı hale gelir ve gelecekteki değişikliklerden etkilenmez.

Örneğin, KMI arayüzü ortak çekirdeği tarafından kullanılan bir yapıya alan ekleyen bir değişikliğe, 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 eklemek herhangi bir sorun teşkil etmez:

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 kullanıma sunulduğu Android platform 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ğun korunmasını sağlar. Bu nedenle, Şekil 2'deki android15-6.6çekirdek, Android 15 ve sonraki sürümleri çalıştıran cihazlarda kullanılabilir. Android platformu 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ı

Sabitleme aşamasında LTS birleştirmesi veya güvenlik sorunu ya da KMI değiştirme yamasının kabul edilmesini gerektiren başka bir etkinlik olursa build.config.common içinde kaydedilen KMI oluşturma numarası artar. 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 nesli değişirse çekirdek, önceki KMI nesline uygun tedarikçi modülleriyle uyumlu olmaz. Bu nedenle, modüllerin çekirdekle eşzamanlı olarak yeniden oluşturulması ve 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 gereksinimleri, yeni GKI çekirdeklerinden başlayarak değişiyor.

GKI çekirdekleri

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

KMI kararlı olduğundan çekirdek, tedarikçi görüntüsünde çekirdek modüllerinin yeniden oluşturulmasına gerek kalmadan güncellenebilir.

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

GKI çekirdekleri yalnızca ilk ve sonraki sürümleri için 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üyle desteklenen ve test edilen çekirdek sürümleri gösterilmektedir.

Android platform sürümü Yükseltme için desteklenen çekirdekler Lansman için desteklenen çekirdekler
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-4.19-stable
android15-6.6
android14-6.1
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-4.19-stable
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
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
android-4.19-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

Destek ömürleri ve güvenlik yamaları

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

ACK'ler, kernel.org'daki ilgili yukarı akış kararlı çekirdekten daha uzun süre boyunca desteklenebilir. Bu durumda Google, bu bölümde gösterilen kullanımdan kaldırma (EOL) tarihine kadar genişletilmiş destek sağlar. Desteği sonlandırılan çekirdekler artık Google tarafından desteklenmez ve bu çekirdekleri çalıştıran cihazlar güvenlik açığı barındırır.

6.6 çekirdeklerinden itibaren kararlı çekirdeklerin destek ömrü 4 yıldır.

Bu tabloda, desteklenen ACK'lerin geçerlilik süreleri gösterilmektedir:

ACK dalı Lansman
tarihi
Destek
ömrü
(yıl)
EOL
android-4.19-stable 2018-10-22 6 2025-01-01
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

Ortak çekirdek testi

Ortak çekirdekler, tedarikçi firmalar tarafından yapılan aşağı akış testine ek olarak çeşitli CI sistemleriyle test edilir.

Linux Çekirdeği İşlevsel Testi

Linux Kernel Functional Test (LKFT) testleri, bir dizi fiziksel arm32 ve arm64 cihaz üzerinde kselftest, LTP, VTS ve CTS gibi çeşitli test paketlerini başlatır. Son test sonuçlarına buradan ulaşabilirsiniz.

KernelCI testi

KernelCI derleme ve önyükleme testleri, ortak bir çekirdek dalına yeni bir yama eklendiğinde başlatılır. Birkaç yüz derleme yapılandırması test edilir ve çeşitli kartlarda başlatılır. Android çekirdekleriyle ilgili son sonuçları burada bulabilirsiniz.

Android göndermeden önce ve gönderdikten sonra test

Göndermeden önce testler, Android ortak çekirdeklerine hataların eklenmesini önlemek için kullanılır. Test sonucu özetini, Android ortak çekirdek gerrit'teki kod değişikliğinin "Kontroller" sekmesinde bulabilirsiniz.

Android gönderim sonrası testi, ci.android.com'da Android ortak çekirdek dallarına yeni yamalar gönderildiğinde Android ortak çekirdek dallarında yayınlanan yeni derlemeler üzerinde gerçekleştirilir. ci.android.com'da kısmi dal adı olarak aosp_kernel yazarak, sonuçların bulunduğu çekirdek dallarının listesini görürsünüz. Örneğin, android-mainline için sonuçları burada bulabilirsiniz. Belirli bir derlemeyi tıkladığınızda Test Results sekmesinde test durumunu görürsünüz.

Android platform kaynak ağacında kernel-presubmit test grubuyla test-mapping tarafından tanımlanan testler, Android çekirdek dalları için göndermeden önce çalıştırılır. Örneğin, test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING içindeki aşağıdaki yapılandırma, Android ortak çekirdek kodu check-in'inde vts_kernel_proc_file_api_test'i ön gönderim testi olarak etkinleştirir.

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

Sıfır gün testi

0 günlük testi, yeni yamalar uygulandığında tüm Android ortak çekirdek dallarında yama bazında test gerçekleştirir. Çeşitli başlatma, işlevsel ve performans testleri yapı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 15 14 13 12 11 10 LKFT KernelCI Gönderme Öncesi Gönderme sonrası sıfır gün
android-mainline
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-4.19-stable

Android'in ortak çekirdeklerine katkıda bulunma

Genellikle özellik geliştirme, Android'in ortak çekirdeklerinde değil, ana Linux'da yapılmalıdır. Yukarı yönlü geliştirmeler kesinlikle teşvik edilir. Geliştirme kabul edildikten sonra, gerektiğinde belirli bir ACK dalına kolayca geri bağlanabilir. Android Kernel Ekibi, Android ekosistemine destek olmak için yukarı akış çalışmalarını desteklemekten memnuniyet duyuyor.

Düzeltmeleri Gerrit'e gönderin ve bu katkı yönergelerine uyun.