Android ortak çekirdekleri

AOSP ortak çekirdekleri (aynı zamanda Android ortak çekirdekleri veya ACK'ler olarak da bilinir), kernel.org çekirdeklerinin alt akışındadır ve ana hat veya Uzun Süreli Desteklenen (LTS) çekirdeklerle birleştirilmemiş, Android topluluğunun ilgisini çeken yamaları içerir. Bu yamalar şunları içerebilir:

  • Android özellikleri için gerekli olan yukarı akış işlevselliğinin destekleri ve kirazlı seçimleri
  • Android cihazlar için hazır ancak hâlâ geliştirilme aşamasında olan özellikler (örneğin, Energy Aware Scheduler görev yerleştirme optimizasyonları).
  • Diğer ekosistem ortakları için yararlı olan satıcı/OEM özellikleri (örneğin, sdcardfs).

android-mainline Android özelliklerinin birincil geliştirme dalıdır. Linus Torvalds bir sürüm veya sürüm adayı yayınladığında Linux ana hattı android-mainline ile birleştirilir. 2019'dan önce, Android ortak çekirdekleri, yakın zamanda bildirilen LTS çekirdeğinin kopyalanması ve Android'e özgü yamaların eklenmesiyle oluşturuldu. Bu süreç 2019'da yeni Android ortak çekirdeğini android-mainline dallandıracak şekilde değiştirildi. Bu yeni model, aynı sonucu aşamalı olarak elde ederek Android yamalarını iletmek ve test etmek için gereken önemli çabayı ortadan kaldırır. android-mainline önemli sürekli testlerden geçmektedir; bu model, yayınlandığı günden itibaren yüksek kaliteli bir çekirdek sağlar.

Yeni bir LTS yukarı yönde bildirildiğinde, karşılık gelen ortak çekirdek android-mainline dallanır. Bu, iş ortaklarının, LTS sürümünün bildirilmesinden önce android-mainline birleşerek bir projeye başlamasına olanak tanır. 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 çekirdeklerinden düzenli birleştirmeler alır. Bu birleştirmeler normalde LTS sürümü yayınlandıktan hemen sonra yapılır. Örneğin, Linux 4.19.64 yayınlandığında, 4.19 ortak çekirdekleriyle (örneğin, android-4.19-q ) birleştirildi. İş ortaklarının, LTS ve Android'e özgü hata düzeltmeleriyle güncel kalmaları için ortak çekirdeklerden kendi ürün çekirdeklerine düzenli olarak birleşmeleri ö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 platformu sürümü tarafından benzersiz bir şekilde tanımlanır, dolayısıyla dallar <androidRelease>-<kernel version> olarak adlandırılır. Örneğin, Android 11 için 5.4 GKI çekirdeği android11-5.4. Android 12 için iki ek GKI çekirdeği vardır: android12-5.4 ve android12-5.10 .

Eski tatlı çekirdeği dalları

Eski tatlı çekirdekleri, yeni özellik geliştirmenin Android ortak çekirdeğinden birleştirmeyi engellememesini garanti etmek için oluşturuldu. Dallar, ilgili tatlı sürümünden önce oluşturuldu ve LTS'den düzenli birleştirmeler alıyor, ancak yeni özellikler bulunmuyor. Örneğin, android-4.9-q LTS 4.9.y şubesinden birleştirmeler alır.

Bir çekirdek sürümü bir başlatma çekirdeği değilse, tatlı çekirdeği oluşturulmadı ancak en son platform sürümüyle ilişkili çekirdek, gelecekteki Android platformu sürümlerine yükseltme için geçerlidir. Örneğin, android-4.9-q , android-4.9* tatlı dallarının sonuncusuydu, dolayısıyla orijinal platform sürümü olan Android 10 ile destekleniyor ve test ediliyor. Ayrıca 4.9 çalıştıran cihazların yükseltmelerini destekleyen platform sürümleriyle de destekleniyor ve test ediliyor. çekirdekler: Android 11 ve Android 12.

Android platformu sürümleri için tatlı adlandırma şeması Android 10 ile birlikte kaldırıldığından, android-4.14-r ve android-4.19-r olarak adlandırılacak son tatlı sürümleri bunun yerine android-4.14-stable ve android-4.19-stable olarak adlandırıldı.

Android 11'den itibaren tatlı çekirdeklerinin yerini GKI çekirdekleri almıştır, dolayısıyla desteklenen tatlı çekirdeklerinin tam listesi bu tabloda yer almaktadır.

Android platformu sürümü Çekirdek Şu ana kadar desteklendi:
Android 10 android-4.9-q
android-4.14-q
android-4.19-q
Ocak 2023
Android 11 android-4.14-stable
android-4.19-stable
Ocak 2024
Aralık 2024

Eski sürüm çekirdek dalları

Sürüm çekirdekleri, aylık Android Güvenlik Bülteni'nde belirtilen yamaların destek raporlarını sağlamak için korunur. Yeni bir Android platformu sürümü çıktığında her lansman çekirdeği için oluşturuldular. İlgili çekirdek veya platform sürümü Destek ömürleri ve güvenlik düzeltme ekleri bölümünde açıklandığı gibi kullanımdan kaldırıldığında kullanımdan kaldırılırlar.

Her ay Android Güvenlik Bülteni yayınlandığında bu çekirdekler, bültende belirtilen, yukarı akış çekirdekleri ve Android ortak çekirdekleriyle ilgili yamaların destek raporlarıyla güncellenir. LTS yamalarını almıyorlar, dolayısıyla küçük sürüm numarası hiçbir zaman değişmiyor. Satıcıya özel yamalar için destek raporları içermezler.

Android 11 ve sonraki platform sürümlerinde iş ortaklarının, Android Güvenlik Bülteni'nde belirtilen yamaları uygulamak için tatlı veya GKI çekirdeklerinden birleşmeleri gerekir. Android 11 veya üzeri platform sürümleri için sürüm çekirdeği oluşturulmayacaktır.

Bu nedenle, 14 sürüm çekirdeğinin tam listesi bu tabloda gösterilmektedir ve hiçbiri eklenmeyecektir.

Android platformu sürümü Çekirdek Şu ana kadar desteklendi:
Android 10 android-4.9-q-release
android-4.14-q-release
android-4.19-q-release
Ocak 2023

Çekirdekleri öne çıkarma ve başlatma

Her Android platformu sürümü, üç Linux çekirdek sürümünden herhangi birini temel alan yeni cihazların başlatılmasını destekler. Aşağıdaki tabloda gösterildiği gibi, Android 11'in başlatma çekirdekleri android-4.14-stable , android-4.19-stable ve android11-5.4 .

Platform sürümünü güncellerken çekirdek yükseltmeleri genellikle gerekli olmadığından, bir platform sürümüne ilişkin en son özelliklerin eksik olduğu çekirdekler, cihazları başlatmak için yine de kullanılabilir. Bu nedenle, android-4.19-q gibi Android 10 için tasarlanmış çekirdekler, platform sürümünün Android 11'e yükseltilmesinden sonra bile cihazlarda kullanılabilir. Android 12'den başlayarak, çekirdek sayısını sınırlamak için başlatma çekirdeklerinden daha az özellik çekirdeği olacaktır. desteklenmesi gereken kararlı KMI'lar.

Android platformu sürümü Çekirdekleri başlat Özellik çekirdekleri
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10 1
android14-6.1
android14-5.15
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10 1
android12-5.4 1
android11-5.4 1
android13-5.15
android13-5.10
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4 1
android-4.19-stable
android12-5.10
android12-5.4
Android 11 (2020) android11-5.4
android-4.19-stable
android-4.14-stable
android11-5.4
android-4.19-stable
android-4.14-stable
Android 10 (2019) android-4.19-q
android-4.14-q
android-4.9-q

android-4.19-q
android-4.14-q
android-4.9-q

1 İlgili BSP'nin platform sürümü için güncellenmesi durumunda ek kısıtlamalar geçerli olabilir. Daha genel bir ifadeyle, çekirdeğin Android Sürüm numarası, hedef FCM sürümünden yüksek veya ona eşit olmalıdır. Ayrıntılar için Satıcı Arayüzü Nesnesi - çekirdek dallarını eşleştirme konusuna bakın.

Ortak çekirdek hiyerarşisi

Android-mainline'dan şube

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

Android-ana hat çekirdeğinden ortak çekirdekler oluşturma

Şekil 1. Android-ana hat çekirdeğinden ortak çekirdekler oluşturma

Yeni Android ortak çekirdeği android12-5.10 2020'de android-mainline dallandığına dikkat edin. 2021'de, bir sonraki LTS ilan edildiğinde android13-5.15 , android-mainline dallandı.

Şekil 1'de gösterildiği gibi her çekirdek sürümü, iki GKI çekirdeğinin temelini oluşturur. Örneğin, iki v5.4 çekirdeği android11-5.4 ve android12-5.4 ; bunların her ikisi de ilgili platform sürümleri için özellik çekirdekleridir. 5.10 için de bu durum geçerli olacak; android12-5.10 LTS ilan edildiğinde oluşturuldu ve android13-5.10 , Android 13 için özelliklerin geliştirilmesine izin vermek üzere 2021 Baharında çekirdek özelliğinin tamamlanmasında android12-5.10 ayrılacak.

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

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

5.10 ACK KMI şubesi yaşam döngüsü

Şekil 2. 5.10 ACK KMI şubesi yaşam döngüsü

Geliştirme sürecini ve şube yaşam döngüsünü açıklığa kavuşturmak amacıyla Şekil 2, 5.10 için ACK KMI şubelerine odaklanmaktadır.

Her ACK KMI dalı, Şekil 2'de her dalda 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şturulduğunda, bir ACK KMI dalı geliştirme aşamasına girer (Şekil 2'deki geliştirme ) ve bir sonraki Android platformu sürümü için özellik katkılarına açıktır. Şekil 2'de, android12-5.10 , 5.10'un yeni yukarı akış LTS çekirdeği olarak bildirilmesiyle oluşturulmuştur. Bir çekirdek sürümü için ikinci ACK KMI dalı, sonraki sürümün geliştirilmesine izin vermek için daha önce oluşturulabilir. Şekil 2'de android13-5.10 , android12-5.10 geliştirme aşamasından çıktığında yaratılmaktadır.

Stabilizasyon aşaması

ACK KMI şubesi özelliğin tamamlandığı bildirildiğinde, Şekil 2'de stab olarak etiketlenen stabilizasyon aşamasına girer. İş ortağı özellikleri ve hata düzeltmeleri hâlâ kabul edilir, 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 ancak KMI tanımının gerektiği gibi güncellenmesi gerekir. KMI izlemeyle ilgili ayrıntılar için GKI genel bakışına bakın.

KMI dondurulmuş faz

Yeni bir platform sürümü AOSP'ye gönderilmeden önce ACK KMI dalı dondurulur ve dalın ömrü boyunca donmuş halde kalır. Bu, kararlı KMI'yı etkilemeden giderilemeyecek ciddi bir güvenlik sorunu belirlenmedikçe, KMI'yı bozan hiçbir değişikliğin kabul edilmeyeceği anlamına gelir. KMI bozulmalarını önlemek amacıyla, Android cihazlar için düzeltme gerekmiyorsa LTS'den birleştirilen bazı yamalar değiştirilebilir veya kaldırılabilir.

Bir ACK KMI dalı dondurulduğunda, mevcut KMI ortak çekirdeği bozulmadığı sürece hata düzeltmeleri ve ortak özellikleri kabul edilebilir. Geçerli KMI'yı oluşturan arayüzler etkilenmediği sürece KMI, dışa aktarılan yeni sembollerle genişletilebilir. KMI'ya yeni arayüzler eklendiğinde hemen kararlı hale gelirler ve gelecekteki değişikliklerle bozulamazlar.

Ö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 sorun değil:

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 kullanıcı alanıyla geriye dönük uyumluluk korunur, böylece çekirdek, cihazın başlatıldığı Android platformu sürümü için güvenli bir şekilde kullanılabilir. Önceki sürümlerle yapılan sürekli testler, uyumluluğun korunmasını sağlar. Yani Şekil 2'de android12-5.10 çekirdeği Android 12 cihazlar ve Android 13 cihazlar için kullanılabilir. Android platformu sürümü önceki sürümlerle de uyumlu olduğundan, android12-5.4 çekirdeği, Android 13 cihazlarında başlatma veya yükseltme amacıyla kullanılabilir.

Dondurulmuş aşamaya girerken şube, KMI oluşturma numarasını içeren KMI sürüm dizesiyle git etiketli olur. Örneğin, android11-5.4 dondurulduğunda, KMI sürüm dizesi 5.4-android11-0 ile etiketlendi; burada sondaki 0 , KMI oluşturma numarasıdır. KMI'yı değiştiren bir yamanın kabul edilmesini gerektiren bir güvenlik sorunu veya başka bir olay varsa, KMI oluşturma numarası artırılır ve şube yeniden etiketlenir. Örneğin, böyle bir değişiklik android11-5.4 kabul edilirse, şube yeni KMI sürümü olan 5.4-android11-1 ile etiketlenecektir. Geçerli KMI nesli uname komutu kullanılarak bulunabilir:

$ uname -r
5.4.61-android11-0-00153-ga972f59040e4

Platform sürümünden sonraki sayı KMI neslidir (bu durumda 0).

KMI nesli değişirse, çekirdek, önceki KMI nesline uygun satıcı modülleriyle uyumlu değildir; bu nedenle modüllerin, çekirdekle eşzamanlı olarak yeniden oluşturulması ve güncellenmesi gerekir. KMI oluşturma değişikliklerinin çok nadir olması bekleniyor.

Çekirdekler arası 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 uyumluluğu korur. Ek olarak, Android platformu sürümleri önceki sürümlerdeki GKI çekirdekleriyle geriye dönük olarak uyumludur. Böylece Android 12 için geliştirilen android12-5.4 çekirdeğini Android 13 çalıştıran cihazlarda güvenle kullanabilirsiniz. Uyumluluk, desteklenen tüm sürümlerle GKI çekirdeklerinin sürekli VTS ve CTS testleri aracılığıyla doğrulanır.

KMI kararlı olduğundan çekirdek, satıcı görüntüsünde çekirdek modüllerinin yeniden oluşturulması gerekmeden güncellenebilir.

Farklı GKI çekirdekleri arasında KMI uyumluluğu korunmaz. Yani örneğin bir android12-5.10 , tüm modüller yeniden oluşturulmadan bir android13-5.10 çekirdeğiyle değiştirilemez.

GKI çekirdekleri yalnızca ilk ve sonraki sürümleri için desteklenir. Daha eski sürümler için desteklenmezler. Yani android13-5.10 çekirdeği Android 12 cihazlarda desteklenmiyor.

Eski çekirdekler

Eski tatlı çekirdekleri ( *-q ve *-stable ), Android platformu sürümleri arasında geriye dönük olarak uyumlu değildir, ancak önceki iki Android platformu sürümündeki çekirdekler, yükseltme için desteklenir. Bu nedenle, android-4.19-q tabanlı bir çekirdek kullanan Android 10 ile başlatılan bir cihaz, Android 2020'ye yükseltme yaparken android-4.19-q çekirdeğini kullanmaya devam edebilir veya android-4.19-stable desteği desteklemek için satıcıya özel kodu güncelleyebilir .

Uyumluluk matrisi

Bu tablo, her Android platformu sürümünde desteklenen ve test edilen çekirdek sürümlerini gösterir.

Android platformu sürümü Yükseltme için desteklenen çekirdekler Başlatma için desteklenen çekirdekler
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
android-4.14-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
android-4.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.9-q (EOL)
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.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.14-p (EOL)
android-4.9-q (EOL)
android-4.9-p (EOL)
android-4.9-o (EOL)
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
Android 11 (2020) android11-5.4
android-4.19-stable
android-4.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.14-p (EOL)
android-4.9-q (EOL)
android-4.9-p (EOL)
android-4.9-o (EOL)
android-4.4-p (EOL)
android-4.4-o (EOL)
android11-5.4
android-4.19-stable
android-4.14-stable
Android 10 (2019) android-4.14-stable
android-4.14-p (EOL)
android-4.9-p (EOL)
android-4.9-o (EOL)
android-4.4-p (EOL)
android-4.4-o (EOL)
android-3.18 (EOL)
android-4.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.9-q (EOL)

Destek ömürleri ve güvenlik yamaları

Android ortak çekirdekleri, ilgili LTS çekirdeği veya Android Platformu sürümü artık desteklenmeyene kadar desteklenir. Bir çekirdek desteklenirken, Android'e özgü kod için yukarı akıştan LTS birleştirmeleri ve hata düzeltmeleri almaya devam eder. Bu düzeltmeler, aylık Android Güvenlik Bültenlerinde belirtilen ve Android ortak çekirdekleriyle ilgili tüm çekirdek güvenlik yamalarını içerir.

İş ortakları, Android ortak çekirdeklerinden düzenli olarak birleşerek mümkün olan tüm çekirdek güvenlik düzeltme eklerini alacaklarından emin olabilirler.

Ortak çekirdek testi

Ortak çekirdekler, satıcılar tarafından yapılan alt testlere ek olarak çeşitli CI sistemleriyle test edilir.

Linux Çekirdeği İşlevsel Testi

Linux Çekirdek Fonksiyonel Testi (LKFT) testleri, bir dizi fiziksel arm32 ve arm64 cihazında kselftest, LTP, VTS ve CTS dahil olmak üzere çeşitli test paketlerini başlatır. En son test sonuçlarını burada bulabilirsiniz.

KernelCI testi

KernelCI oluşturma ve önyükleme testleri, ortak bir çekirdek dalına yeni bir yama eklendiğinde başlatılır. Yüzlerce yapı konfigürasyonu test edildi ve çeşitli kartlarda başlatıldı. Android çekirdeklerine ilişkin son sonuçları burada bulabilirsiniz.

Android ön gönderim ve gönderim sonrası testleri

Ön gönderim testleri, hataların Android ortak çekirdeklerine aktarılmasını önlemek için kullanılır. Test sonucu özeti, Android ortak çekirdek gerritindeki kod değişikliğinin 'Kontroller' sekmesinde bulunabilir.

Android gönderim sonrası testi, yeni yamalar ci.android.com adresindeki bir Android ortak çekirdek dalına bağlandığında, Android ortak çekirdek dallarında yayınlanan yeni yapılarda gerçekleştirilir. ci.android.com'a kısmi dal adı olarak aosp_kernel girdiğinizde, mevcut sonuçların bulunduğu çekirdek dallarının bir listesini görürsünüz. Örneğin, android-mainline sonuçları burada bulunabilir. Belirli bir yapıya tıkladığınızda, Test Results sekmesinde test durumunu bulacaksınız.

Android platformu kaynak ağacında test grubu kernel-presubmit ile test-mapping ile tanımlanan testler, Android çekirdek dalları için ön gönderim olarak çalıştırılacaktır. Örneğin test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING'deki aşağıdaki yapılandırma, vts_kernel_proc_file_api_test'i Android ortak çekirdek kodu girişinde ön bumit testi olarak etkinleştirecektir.

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

0 günlük test

0 günlük test, yeni yamalar uygulandığında tüm Android ortak çekirdek dallarında yama bazında testler gerçekleştirir. Çeşitli önyükleme, işlevsellik ve performans testleri gerçekleştirilir. Genel grup cros-kernel-buildreports'a katılın

Test matrisi

Android ortak çekirdeği Android Platformu sürümleri Test Paketleri
Ana 14 13 12 11 10 LKFT ÇekirdekCI Ön Gönderim Gönderi Gönder 0 gün
android-mainline
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-4.19-stable
android-4.14-stable

Android ortak çekirdeklerine katkıda bulunun

Genel olarak özellik geliştirme, Android ortak çekirdeklerinde değil, ana hat Linux'ta yapılmalıdır. Yukarı yöndeki geliştirme güçlü bir şekilde teşvik edilir ve geliştirme burada kabul edildikten sonra, gerektiğinde belirli bir ACK şubesine kolaylıkla desteklenebilir. Android Çekirdek Ekibi, Android ekosisteminin yararına yönelik yukarı akış çabalarını desteklemekten mutluluk duyar.

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