Android Ortak Çekirdekleri

AOSP ortak çekirdekleri (Android ortak çekirdekleri veya ACK'ler olarak da bilinir), kernel.org çekirdeklerinin aşağı akışıdır ve ana hat veya Uzun Süreli Desteklenen (LTS) çekirdeklerle birleştirilmemiş, Android topluluğunun ilgi alanına giren yamaları içerir. Bu yamalar şunları içerebilir:

  • Android özellikleri için gerekli olan yukarı akış işlevselliğine ilişkin backport'lar ve özenle seçilenler
  • Android cihazlar için hazır olan ancak yukarı yönde hala geliştirilmekte olan özellikler (örneğin, Energy Aware Zamanlayıcı görev yerleştirme optimizasyonları).
  • Diğer ekosistem ortakları için yararlı olan satıcı/OEM özellikleri (örneğin, sdcardfs).

android-mainline Android özellikleri için 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, yakın zamanda açıklanan LTS çekirdeği klonlanarak ve Android'e özel yamalar eklenerek Android ortak çekirdekleri oluşturuldu. Bu süreç, 2019'da yeni Android ortak çekirdeğini android-mainline dallandıracak şekilde değişti. Bu yeni model, aynı sonucu artımlı olarak gerçekleştirerek bağlantı noktasını iletme ve Android yamalarını test etme konusundaki önemli çabayı ortadan kaldırır. android-mainline önemli sürekli testlerden geçer, bu model yayınlandığı günden itibaren yüksek kaliteli bir çekirdek sağlar.

Yeni bir LTS yukarı akış bildirildiğinde, karşılık gelen ortak çekirdek android-mainline dallanır. Bu, iş ortaklarının android-mainline birleştirerek LTS sürümünün bildirilmesinden önce bir projeye başlamasına olanak tanır. Yeni ortak çekirdek dalı oluşturulduktan sonra, iş ortakları sorunsuz bir şekilde birleştirme kaynağını yeni dala değiştirebilir.

Diğer yaygın çekirdek dalları, ilişkili LTS çekirdeğinden düzenli birleştirmeler alır. Bu birleştirmeler normalde LTS sürümü gönderildikten hemen sonra yapılır. Örneğin, Linux 4.19.64 yayınlandığında, 4.19 ortak çekirdeğiyle birleştirildi (örneğin, android-4.19-q ). İş ortaklarının, LTS ve Android'e özgü hata düzeltmeleriyle güncel kalmak için ortak çekirdeklerden ürün çekirdeklerine düzenli olarak geçiş yapmaları şiddetle 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, bu nedenle 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ı çekirdek dalları

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

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

Android platformu sürümleri için tatlı adlandırma şeması Android 10 ile kaldırıldığı için, android-4.14-r ve android-4.19-r olarak adlandırılacak olan 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 tablodadır.

Android platformu sürümü Çekirdek şu tarihe kadar desteklenir:
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

Eski yayın çekirdek dalları

Sürüm çekirdekleri, aylık Android Güvenlik Bülteni'nde belirtilen yamaların arka planlarını sağlamak için korunur. Yeni bir Android platformu sürümü olduğunda her başlatma çekirdeği için oluşturuldular. İlişkili çekirdek veya platform sürümü , Destek ömürleri ve güvenlik düzeltme ekleri bölümünde açıklandığı şekilde 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 bahsedilen yukarı akış çekirdekleri ve Android ortak çekirdekleriyle ilgili yamaların backport'larıyla güncellenir. LTS yamaları almazlar, bu nedenle küçük sürüm numarası asla değişmez. Satıcıya özgü yamalar için geri bildirimler 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 sweet veya GKI çekirdeklerini birleştirmeleri gerekir. Android 11 veya sonraki platform sürümleri için yayın çekirdeği oluşturulmayacaktır.

Bu nedenle, 14 yayın çekirdeğinin tam listesi bu tabloda gösterilmektedir ve hiçbiri eklenmeyecektir.

Android platformu sürümü Çekirdek şu tarihe kadar desteklenir:
Android 10 android-4.9-q-release
android-4.14-q-release
android-4.19-q-release
Ocak 2023

Özellik ve başlatma çekirdekleri

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

Platform sürümü güncellenirken genellikle çekirdek yükseltmeleri gerekmediğinden, bir platform sürümünün en son özellikleri eksik olan çekirdekler, aygıtları 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ü Android 11'e yükseltildikten sonra bile cihazlarda kullanılabilir. desteklenmesi gereken kararlı KMI'lar.

Android platformu sürümü Çekirdeği başlat Özellik çekirdekleri
Android 10 (2019) android-4.9-q
android-4.14-q
android-4.19-q

android-4.9-q
android-4.14-q
android-4.19-q
Android 11 (2020) android-4.14-stable
android-4.19-stable
android11-5.4
android-4.14-stable
android-4.19-stable
android11-5.4
Android 12 (2021) android-4.19-stable
android11-5.4 1
android12-5.4
android12-5.10
android12-5.4
android12-5.10
Android 13 (2022) android11-5.4 1
android12-5.4 1
android12-5.10 1
android13-5.10
android13-5.15
android13-5.10
android13-5.15

1 İlişkili BSP platform sürümü için güncellendiyse 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ı Arabirimi Nesnesi - çekirdek dallarını eşleştirme konusuna bakın.

Ortak çekirdek hiyerarşisi

Android ana hattından dallanma

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

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 açıklandığında android13-5.15 , android-mainline dallandı.

Şekil 1'de gösterildiği gibi, her çekirdek sürümü, iki GKI çekirdeğinin temelidir. Örneğin, iki v5.4 çekirdeği android11-5.4 ve android12-5.4 ve her ikisi de ilgili platform sürümleri için özellik çekirdekleridir. 5.10 için de durum böyle olacak; android12-5.10 LTS ilan edildiğinde oluşturuldu ve android13-5.10 Android 13 için özelliklerin geliştirilmesine izin vermek üzere ilkbahar 2021'de çekirdek özelliğinin tam dönüm noktasında android12-5.10 dallanacak.

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

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

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

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

Geliştirme sürecini ve şube yaşam döngüsünü açıklığa kavuşturmak için Ş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 fazdan bağımsız olarak düzenli olarak birleştirilir.

Geliştirme aşaması

Bir ACK KMI şubesi oluşturulduğunda, geliştirme aşamasına girer (Şekil 2'deki dev ) ve bir sonraki Android platform sürümü için özellik katkılarına açıktır. Şekil 2'de, 5.10 yeni yukarı akış LTS çekirdeği olarak ilan edildiğinde android12-5.10 oluşturuldu. 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, android12-5.10 geliştirme aşamasından çıktığında android13-5.10 oluşturulur.

Stabilizasyon aşaması

ACK KMI dalı, özelliğin tamamlandığı bildirildiğinde, Şekil 2'de saplama olarak etiketlenen stabilizasyon aşamasına girer. İş ortağı özellikleri ve hata düzeltmeleri hala kabul edilir, ancak arayüzü etkileyen değişiklikleri algılamak 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 şekilde güncellenmesi gerekir. KMI izlemeyle ilgili ayrıntılar için GKI'ya genel bakışa bakın.

KMI donmuş faz

AOSP'ye yeni bir platform sürümü gönderilmeden önce, ACK KMI şubesi dondurulur ve şubenin ömrü boyunca donmuş halde kalır. Bu, kararlı KMI'yı etkilemeden hafifletilemeyecek ciddi bir güvenlik sorunu belirlenmedikçe KMI'yi bozan hiçbir değişikliğin kabul edilmediği anlamına gelir. 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 kaldırılabilir.

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

Örneğin, bir 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 iyidir:

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üvenle 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ı için başlatma veya yükseltme amacıyla kullanılabilir.

Dondurulmuş aşamaya girerken dal, KMI üretim numarasını içeren KMI sürüm dizesiyle git-etiketlenir. Örneğin, android11-5.4 dondurulduğunda, KMI sürüm dizesi 5.4-android11-0 ile etiketlendi; burada sondaki 0 , KMI üretim numarasıdır. KMI değiştiren bir yamanın kabul edilmesini gerektiren bir güvenlik sorunu veya başka bir olay varsa, KMI üretim numarası artırılır ve şube yeniden etiketlenir. Örneğin, android11-5.4 böyle bir değişiklik kabul edilirse şube, yeni KMI sürümü 5.4-android11-1 ile etiketlenir. 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 uyan 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ı beklenmektedir.

Çekirdekler arası uyumluluk

Aynı LTS ailesindeki çekirdekler arasındaki uyumluluk gereksinimleri, yeni GKI çekirdeklerinden başlayarak değişmektedir.

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ümlerden 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 ile doğrulanır.

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

Farklı GKI çekirdekleri arasında KMI uyumluluğu korunmaz. Bu nedenle, örneğin, bir android12-5.10 tüm modülleri yeniden oluşturmadan bir android13-5.10 çekirdeği ile değiştirilemez.

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

Eski çekirdekler

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

Uyumluluk matrisi

Bu tablo, her Android platformu sürümüyle 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 10 (2019) android-3.18 (EOL)
android-4.4-o (EOL)
android-4.9-o
android-4.4-p
(EOL)
android-4.9-p (EOL)
android-4.14-p (EOL)
android-4.9-q
android-4.14-q
android-4.19-q
Android 11 (2020) android-4.4-o (EOL)
android-4.4-p (EOL)
android-4.9-o (EOL)
android-4.9-p (EOL)
android-4.9-q
android-4.14-p (EOL)
android-4.14-q
android-4.19-q
android-4.14-stable
android-4.19-stable
android11-5.4
Android 12 (2021) android-4.9-o (EOL)
android-4.9-p (EOL)
android-4.9-q
android-4.14-p
(EOL)
android-4.14-q
android-4.19-q
android-4.14-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
Android 13 (2022) android-4.9-q
android-4.14-q
android-4.19-q
android-4.14-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
android13-5.10
android13-5.15
android11-5.4
android12-5.4
android12-5.10
android13-5.10
android13-5.15

Destek ömürleri ve güvenlik yamaları

Android ortak çekirdekleri, ilişkili LTS çekirdeği veya Android Platformu sürümü artık desteklenmeyene kadar desteklenir. Bir çekirdek desteklenirken, yukarı akıştan LTS birleştirmeleri ve Android'e özgü kod için hata düzeltmeleri almaya devam eder. Bu düzeltmeler, Android ortak çekirdekleriyle ilgili aylık Android Güvenlik Bültenlerinde belirtilen 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 yamalarını aldıklarından emin olabilirler.

Ortak çekirdek testi

Ortak çekirdekler, satıcılar tarafından aşağı akış testine ek olarak birkaç CI sistemiyle test edilir.

Linaro Çekirdeği İşlevsel Testi

Linaro Kernel Functional Testing (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. Son test sonuçları burada bulunabilir.

KernelCI testi

KernelCI oluşturma ve başlatma testleri, ortak bir çekirdek dalına yeni bir yama yüklendiğinde başlatılır. Birkaç yüz yapı yapılandırması test edildi ve çeşitli kartlarda önyüklendi. Android çekirdekleri için son sonuçlar burada bulunabilir.

Android gönderme öncesi ve gönderme sonrası testi

Ön gönderme testleri, hataların ortak çekirdeklere dahil edilmesini önlemek için kullanılır. Sonuçlar şu anda herkese açık değil.

Android gönderme sonrası testi, ortak bir çekirdek dalına yeni bir yama gönderildiğinde gerçekleştirilir. aosp_kernel kısmi dal adı olarak girerek, çekirdek dallarının bir listesini ve mevcut sonuçları görürsünüz. Örneğin, android-mainline için sonuçlar burada bulunabilir.

0 günlük test

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

Test matrisi

Android ortak çekirdeği Android Platformu sürümleri Test Takımları
Usta 13 12 11 10 9 (Pasta) LKFT KernelCI Ön Gönderim Gönderi Gönder 0 günlük
android-mainline
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
android-4.14-q
android-4.9-q

Android ortak çekirdeklerine katkıda bulunmak

Genel olarak özellik geliştirme, Android ortak çekirdeklerinde değil, ana hat Linux'ta yapılmalıdır. Yukarı yönde geliştirme şiddetle teşvik edilir ve geliştirme orada kabul edildikten sonra, gerektiğinde belirli ACK şubesine kolayca geri aktarılabilir. Android Çekirdek Ekibi, Android ekosisteminin yararına olan yukarı akış çabalarını desteklemekten mutluluk duyar.

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