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 yukarı akış işlevleri ve varlık seçenekleri
  • Android cihazlar için hazır ancak henüz geliştirme aşamasında olan özellikler
  • Diğer ekosistem iş ortaklarının faydalı olduğu tedarikçi/OEM özellikleri

android-mainline, Android özelliklerinin 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'in ortak çekirdekleri, kısa süre önce bildirilen LTS çekirdeği klonlanıp Android'e özel yamalar eklenerek oluşturulmuştu. Bu işlem 2019'da değiştirilmiştir. Yeni Android çekirdeğini android-mainline yerine dallar. Bu yeni model, aynı sonucu kademeli olarak elde ederek bağlantı noktasını yönlendirmek ve Android yamalarını test etmek için önemli çabaların önüne geçer. android-mainline önemli düzeyde sürekli testlerden geçer. Bu model, yayınlandığı günden itibaren çekirdeğin yüksek kaliteli olmasını sağlar.

Yeni bir LTS yukarı yayın bildirildiğinde, karşılık gelen ortak çekirdek android-mainline bölgesinden dallara ayrılır. Bu sayede iş ortakları, android-mainline ürününden birleştirme yaparak LTS sürümü bildirilmeden önce bir 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 çekirdekleri kararlı bir Kernel Modülü Arayüzüne sahiptir. 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 (AOSP deneysel) için GKI çekirdeği android15-6.6 kullanıma sunuldu.

Çekirdekleri öne çıkarma ve kullanıma sunma

Android 15'ten (AOSP deneysel) önce, en yeni üç çekirdekten biri cihaz lansmanı için kullanılabilmekteydi. Android 15'ten (AOSP deneysel) itibaren, cihazı başlatmak için en yeni iki çekirdek sürümü kullanılabilir. Android 15'in (AOSP deneysel) lansman çekirdekleri android15-6.6 ve android14-6.1'dır.

Platform sürümünü güncellerken çekirdek yükseltmelerine gerek olmadığından platform sürümünün en son özelliklerine sahip olmayan çekirdekler, cihazları başlatmak için kullanılmaya devam edebilir. Bu nedenle, Android 14 için tasarlanmış android14-6.1 gibi çekirdekler, platform sürümünü Android 15'e (AOSP deneysel) yükselttikten sonra bile cihazlarda kullanılabilir.

Android platform sürümü Çekirdekleri başlat Özellik çekirdekleri
Android 15 (AOSP deneysel sürümü) (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.101
android14-6.1
android14-5.15
Android 13 (2022) android13-5.15
android13-5.10
android12-5.101
android12-5.41
android11-5.41
android13-5.15
android13-5.10
Android 12 (2021) android12-5.10
android12-5.4
android11-5.41
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 Platform sürümü için ilişkili BSP güncellendiğinde ek kısıtlamalar uygulanabilir. 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şleştirme bölümüne bakın.

Ortak çekirdek hiyerarşisi

android-mainline'dan dalla

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

android-mainline çekirdeğinden yaygın çekirdekler oluşturma

Şekil 1. android-mainline çekirdeğinden yaygın çekirdekler oluşturma

Yeni Android ortak çekirdeğinin (android14-6.1) 2022'de android-mainline adresinde dallandığına dikkat edin. 2023'te bir sonraki LTS bildirildiğinde android15-6.6, android-mainline bölgesinden dallandı.

Şekil 1'de gösterildiği gibi, her çekirdek sürümü iki GKI çekirdeğinin temelini oluşturabilir. Ö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. Bu durum 5.10 için de geçerliydi. LTS bildirildiğinde android12-5.10 oluşturuldu ve Android 13 için özelliklerin geliştirilmesine olanak tanımak için 2021 ilkbaharında çekirdek özelliğinde android12-5.10 olan android13-5.10 kolu oluşturuldu. Android 15 (AOSP deneysel) (2024) sürümünden itibaren, çekirdek sürümü başına yalnızca bir yeni GKI çekirdeği bulunmaktadır (android15-6.1 çekirdeği yoktur).

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

Bir ACK KMI dalının yaşam döngüsü aşağıdaki Şekil 2'de gösterilmiştir.

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

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

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

Her ACK KMI şubesi, Şekil 2'de belirtilen her dalda farklı renklerle gösterilen üç aşamadan geçer. Gösterildiği gibi LTS, aşama ne olursa olsun düzenli olarak birleştirilir.

Geliştirme aşaması

ACK KMI şubesi oluşturulduğunda geliştirme aşamasına girer (Şekil 2'de geliştirme olarak etiketlenmiştir) ve bir sonraki Android platformu sürümü için özellik katkısı yapmaya açıktır. Şekil 2'de, 6.6 yeni yukarı akış LTS çekirdeği olarak belirtildiğinde android15-6.6 oluşturulmuştur.

Sabitleme aşaması

ACK KMI dalı, özellik tamamlandı olarak bildirildiğinde stabilizasyon aşamasına girer (Şekil 2'de kararlı olarak etiketlenir). İş ortağı özellikleri ve hata düzeltmeleri hâlâ kabul edilmektedir ancak arayüzü etkileyen değişiklikleri tespit etmek için KMI izleme etkinleştirilmiştir. 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 izlemesiyle ilgili ayrıntılar için GKI'ya genel bakış bölümüne bakın.

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. Yani stabil KMI'yı etkilemeden azaltılması mümkün olmayan ciddi bir güvenlik sorunu tespit edilmediği sürece, KMI'yi bozan hiçbir değişiklik kabul edilmez. KMI kesintilerini önlemek amacıyla, Android cihazlarda düzeltme gerekli değilse LTS'den birleştirilmiş bazı yamalar değiştirilebilir veya çıkarı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'yı oluşturan arayüzler etkilenmediği sürece KMI, dışa aktarılan yeni sembollerle genişletilebilir. KMI'ya eklenen yeni arayüzler hemen kararlı hale gelir ve gelecekteki değişikliklerden etkilenmez.

Örneğin, bir KMI arayüzü ortak çekirdeği tarafından kullanılan yapıya alan ekleyen değişikliklere, 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, cihazın kullanıma sunulduğu Android platformu sürümü için çekirdeğin güvenli bir şekilde kullanılabilmesi amacıyla kullanıcı alanıyla geriye dönük uyumluluk korunur. Önceki sürümlerle yapılan sürekli testler, uyumluluğun korunmasını sağlar. Şekil 2'de görüldüğü gibi, android15-6.6 çekirdeği Android 15 (AOSP deneysel) cihazlar ve sonraki sürümlere sahip cihazlar için kullanılabilir. Android platformu sürümü önceki sürümlerle de uyumlu olduğundan, android14-6.1 çekirdeği Android 15 (AOSP deneysel) 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. Geçerli KMI oluşturma işlemi, uname komutu kullanılarak bulunabilir:

$ 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ı bekleniyor.

Çekirdekler arasında uyumluluk

Aynı LTS ailesindeki çekirdekler arasındaki uyumluluk gereksinimleri, yeni GKI çekirdeklerinden itibaren değişiyor.

GKI çekirdekleri

GKI çekirdekleri, çekirdek sürümünü destekleyen tüm Android platformu sürümleriyle geriye dönük uyumluluk sağlar. Ayrıca Android platformu sürümleri, önceki sürümlerdeki GKI çekirdekleriyle geriye dönük uyumludur. Böylece, Android 14 (2023) için geliştirilen android14-6.1 çekirdeğini Android 15 (AOSP deneysel) (2024) yüklü cihazlarda güvenle kullanabilirsiniz. Uyumluluk, desteklenen tüm sürümlerle birlikte GKI çekirdeklerinin sürekli VTS ve CTS testleriyle 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, bir android14-6.1 çekirdeği, tüm modüller yeniden oluşturulmadan 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 geliştiriciler için android15-6.6 çekirdeği desteklenmez.

Uyumluluk matrisi

Bu tabloda, her Android platformu 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 Kullanıma sunma için desteklenen çekirdekler
Android 15 (AOSP deneysel sürümü) (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ı

İlişkilendirilmiş LTS çekirdeği veya Android Platform sürümü artık desteklenmeyene kadar Android'in ortak çekirdekleri desteklenir. Bir çekirdek desteklense de yukarı akıştan LTS birleştirmeleri ve Android'e özgü kodlar için hata düzeltmeleri almaya devam eder. Bu düzeltmeler, Android'in yaygın çekirdekleriyle ilgili aylık Android Güvenlik Bültenleri'nde belirtilen tüm çekirdek güvenlik yamalarını içerir.

İş ortakları, GKI çekirdeklerini kullanarak mümkün olan tüm çekirdek güvenlik yamalarını aldıklarından emin olabilir.

Yaygın çekirdek testi

Yaygın çekirdekler, satıcılar tarafından aşağı akış testine ek olarak çeşitli CI sistemleriyle test edilir.

Linux Kernel İşlev 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 başlatma testleri, ortak bir çekirdek dalına yeni bir yama uygulandığında başlatılır. Farklı ana kartlarda yüzlerce derleme yapılandırması test edilip başlatılır. Android çekirdekleriyle ilgili en son sonuçları burada bulabilirsiniz.

Android yayın öncesi ve yayın sonrası testi

Gönderme öncesi testleri, hataların Android'in ortak çekirdeklerine eklenmesini önlemek için kullanılır. Test sonucu özeti, Android ortak çekirdekgerritindeki kod değişikliğinin "Kontroller" sekmesinde bulunabilir.

Android gönderme sonrası testi, ci.android.com'da bir Android ortak çekirdek dalına yeni yamalar uygulandığında Android ortak çekirdek dallarında yayınlanan yeni derlemelerde gerçekleştirilir. ci.android.com'da kısmi bir dal adı olarak aosp_kernel değerini girdiğinizde, sonuçların mevcut olduğ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 kaynağı ağacındaki test grubu kernel-presubmit ile test-eşleme yoluyla tanımlanan testler, Android çekirdek dalları için ön gönderme olarak çalıştırılacaktır. Örneğin, test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING yapılandırmasında aşağıdaki yapılandırmanın gerçekleştirilmesi, Android ortak çekirdek kodu giriş işleminde vts_kernel_proc_file_api_test'i presbumit testi olarak etkinleştirir.

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

0 günlük test

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
Santral 15 14 13 12 11 10 LKFT KernelCI Gönderme Öncesi Gönderi Gönderme sıfır gün
android-mainline
android5-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 yaygın kullanılan çekirdeklerine katkıda bulunun

Genel olarak, özellik geliştirme Android'in yaygın çekirdeklerinde değil ana Linux çekirdeklerinde yapılmalıdır. Yukarı akış geliştirme kesinlikle teşvik edilir ve geliştirme burada kabul edildikten sonra gerektiğinde belirli ACK şubesine kolayca geri taşınabilir. Android Kernel Ekibi, Android ekosistemine destek olmak için yukarı akış çalışmalarını desteklemekten memnuniyet duyuyor.

Yamaları Gerrit'e gönderin ve bu katkı kurallarına uyun.