AOSP ortak çekirdekleri (Android ortak çekirdekleri veya ACK'ler olarak da bilinir), kernel.org çekirdeklerinin alt akışıdır ve Android topluluğunun ilgisini çeken, ana hat veya uzun süreli destekli (LTS) çekirdeklerle 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 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, 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ı yeni dalla sorunsuz bir şekilde değiştirebilir.
Diğer yaygın çekirdek dalları, ilişkili LTS çekirdeklerinden 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 çekirdeklerinin kararlı bir çekirdek modülü arayüzü vardır. KMI, çekirdek sürümü ve Android platform sürümü ile benzersiz ş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.
Özellik ve başlatma ç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'in lansman ç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
|
android12-5.10
android12-5.4
|
Android 11 (2020) |
android11-5.4
|
android11-5.4
|
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 daha yüksek 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 üst düzeyi Şekil 1'de gösterilmiştir.
Ş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, 5.15 sürümüne sahip iki çekirdek vardır: android13-5.15
ve android14-5.15
. Her ikisi de ilgili platform sürümleri için ö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 baharındaki ç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 şube yaşam döngüsü
ACK KMI şubesinin yaşam döngüsü aşağıda Şekil 2'de gösterilmiştir.
Şekil 2. 6.6 ACK KMI şube 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 ritimde (normalde iki haftada bir) güncellenir. KMI izlemeyle ilgili ayrıntılar için GKI'ye genel bakış başlıklı makaleyi inceleyin.
KMI donmuş 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ş 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 sorun oluşturmaz:
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
çekirdeği 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 kullanıma sunma veya yükseltme için kullanılabilir.
KMI oluşturma numarası
Kararlılaştırma aşamasında bir LTS birleştirme işlemi veya bu işlemden sonra KMI'yi değiştiren bir yamanın kabul edilmesini gerektiren bir güvenlik sorunu ya da başka bir etkinlik varsa build.config.common
içine 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 durumda 6
).
KMI nesli değişirse çekirdek, önceki KMI nesline uygun tedarikçi modülleriyle uyumlu olmaz. Bu nedenle, modüllerin çekirdekle senkronize 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 koşulları, yeni GKI çekirdeklerinden itibaren 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ıdır. Bu sayede, çekirdek, tedarikçi resmindeki çekirdek modüllerinin yeniden derlenmesi gerekmeden 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
|
android15-6.6
|
Android 14 (2023) |
android14-6.1
|
android14-6.1
|
Android 13 (2022) |
android13-5.15
|
android13-5.15
|
Android 12 (2021) |
android12-5.10
|
android11-5.4
|
Android 11 (2020) |
android11-5.4
|
android11-5.4
|
Destek süreleri 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, aylık Android Güvenlik Bültenleri'nde ACK ile ilgili olarak 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.
Çekirdek 6.6'dan 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 ömür boyu (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 |
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 İşlevsel Testi (LKFT) testleri, bir dizi fiziksel arm32 ve arm64 cihazda kselftest, LTP, VTS ve CTS gibi çeşitli test paketlerini başlatır. Son test sonuçlarını burada bulabilirsiniz.
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'in 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 derlemelerde 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
ile ilgili 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 test, yeni yamalar commit edildiğinde tüm Android ortak çekirdek dallarında yama bazında 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 | 15 | 14 | 13 | 12 | 11 | 10 | LKFT | KernelCI | Göndermeden Önce | Gönderme sonrası | sıfır gün | |
android-mainline
|
✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android15-6.6
|
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android14-6.1
|
✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android13-5.15
|
✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10
|
✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android11-5.4
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
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 Çekirdek Ekibi, Android ekosisteminin yararına olacak şekilde üst kaynağa aktarma çalışmalarını desteklemekten memnuniyet duyar.
Düzeltmeleri Gerrit'e gönderin ve bu katkı yönergelerine uyun.