Bu sayfada, Genel Çekirdek Görüntüleri (GKI'lar) için sürüm oluşturma şeması açıklanmaktadır. Genel Çekirdek Görüntüsü (GKI), çekirdek sürümü adı verilen benzersiz bir tanımlayıcıya sahiptir. Çekirdek sürümü, çekirdek modülü arayüzü (KMI) sürümünden ve alt düzeyden oluşur. Çekirdek sürümü, yayınlanan görüntüye özgüdür. KMI sürümü ise bir sürümün oluşturulduğu arayüzü temsil eder. Bir KMI sürümü, birden fazla çekirdek sürümünü destekleyebilir. Çekirdek sürümü yalnızca bir KMI sürümüne bağlıdır. Çekirdek modülü arayüzünün değiştirilmesi gerektiği nadir durumlarda, KMI sürümündeki değişikliği yansıtmak için KMI oluşturma işlemi tekrarlanır.
Şartların özeti
Aşağıdaki tabloda, bu sayfada ve GKI güncellemeleri için kullanılan önemli terimler özetlenmektedir.
Ad | Sembol | Örnek | Açıklama |
---|---|---|---|
Çekirdek sürümü | w.x.y-zzz-k-suffix | 5.4.42-android12-0-foo | GKI sürümünün benzersiz tanımlayıcısı. Bu, uname tarafından döndürülen değerdir. |
KMI sürümü | w.x-zzz-k | 5.4-android12-0 | GKI ile dinamik olarak yüklenebilen çekirdek modülleri (DLKM) arasındaki çekirdek modülü arayüzünü (KMI) açıklar. |
Alt seviye | y | 42 | Aynı KMI sürümündeki çekirdek sürümlerinin yayınlanma sırasını açıklar. |
Aşağıdaki tabloda, referans olarak diğer ilgili terimler listelenmiştir.
Ad | Sembol | Örnek | Açıklama |
---|---|---|---|
w.x.y | w.x.y | 5.4.42 |
Ayrıntılar için Linux Kernel Makefiles başlıklı makaleye bakın ("KERNELRELEASE" araması yapın). w.x.y, bu belgede doğrudan kullanılmaktadır. Bu, yaygın olarak üç bölümlü sürüm numarası olarak da bilinir. VINTF'de kullanılan çekirdek sürümü terimi, özellikle w olmak üzere diğer terimlerle karıştırılabilir. Bu değişkene libkver içinde kernel_version_tuple adı verilir. Bu demet, OTA veya ana hat güncellemeleri de dahil olmak üzere hiçbir güncelleme ile azaltılmamalıdır. |
Çekirdek dalı | zzz-w.x | android12-5.4 | Bu terim, Ortak çekirdek dalı türleri bölümünde kullanılır. |
Sürüm | w | 5 | Bu terim bu dokümanda kullanılmıyor. Bu değişkene libkver'de version (sürüm) adı verilir. |
Yama düzeyi | x | 4 | Bu terim bu dokümanda kullanılmıyor. Bu değişkene libkver'de patch_level adı verilir. |
Android sürümü | zzz | android12 |
Bu, çekirdeğin ilişkilendirildiği Android (tatlı) sürüm numarasıdır.
Android sürüm numarası, OTA veya Mainline dahil hiçbir güncelleme ile azaltılmamalıdır. |
KMI üretimi | k | 0 |
Bu, olası olmayan olaylarla başa çıkmak için eklenen ek bir sayıdır. Bir güvenlik hatası düzeltmesi için aynı Android sürümünde KMI'de değişiklik yapılması gerekiyorsa KMI oluşturma sayısı artırılır. KMI oluşturma numarası 0 ile başlar. |
Sürüm oluşturma tasarımı
Çekirdek sürümü
Tanım
GKI ile birlikte gönderilen cihazlarda çekirdek sürümü şu şekilde tanımlanır:
KernelRelease :=
Version.PatchLevel.SubLevel-AndroidRelease-KmiGeneration-suffix
w .x .y -zzz -k -something
Daha fazla bilgi için Cihazdan çekirdek sürümünü belirleme başlıklı makaleyi inceleyin.
Aşağıda, çekirdek sürümüne dair bir örnek verilmiştir.
5.4.42-android12-0-00544-ged21d463f856
Açıklama
Çekirdek sürümü, GKI sürümünün benzersiz kimliğidir. İki GKI ikilisi aynı çekirdek sürümüne sahipse bayt bazında aynı olmalıdır.
Çekirdek sürümü; KMI sürümü, alt düzey ve sonekten oluşur. Bu belge açısından, KMI oluşturulduktan sonraki sonek yoksayılır.
KMI sürümü
Tanım
KMI sürümü aşağıdaki şekilde tanımlanır:
KmiVersion :=
Version.PatchLevel-AndroidRelease-KmiGeneration
w .x -zzz -k
Alt düzeyin (y
) KMI sürümünün bir parçası olmadığını unutmayın. Çekirdek sürümü bölümündeki örnekte KMI sürümü şöyledir:
5.4-android12-0
Açıklama
KMI sürümü, GKI ile dinamik olarak yüklenebilen çekirdek modülleri (DLKM) arasındaki çekirdek modülü arayüzünü (KMI) tanımlar.
İki çekirdek sürümünün KMI sürümü aynıysa aynı çekirdek modülü arayüzünü uygularlar. Biriyle uyumlu olan DLKM'ler diğeriyle de uyumludur.
KMI sürümü, OTA güncellemeleriyle düşürülmemelidir.
Alt seviye
Alt düzey olan y
, aynı KMI sürümündeki çekirdek sürümlerinin yayınlanma sırasını açıklar.
Aynı KMI sürümüne sahip ancak sırasıyla Y1 ve Y2 alt düzeylerine sahip iki çekirdek sürümü için:
- Y1, Y2'den küçük veya Y2'ye eşitse Y1 çalıştıran bir cihaz, Y2'ye güncelleme alabilir.
- Y1, Y2'den büyükse Y1'i çalıştıran bir cihaz Y2'ye güncellenemez.
Yani KMI sürümü değişmezse alt düzey, OTA güncellemesiyle düşürülmemelidir.
Cihazdan çekirdek sürümünü belirleme
Tam çekirdek sürümünü uname -r
veya aşağıdaki kod snippet'iyle uname(2)
komutunu çalıştırarak bulabilirsiniz:
std::string get_kernel_release() {
struct utsname buf;
return uname(&buf) == 0 ? buf.release : "";
}
Örnek bir çıkış:
5.4.42-android12-0-00544-ged21d463f856
Bu belgenin amacı doğrultusunda, çekirdek bilgileri ayıklanırken KMI oluşturulduktan sonraki her şey yoksayılır. Daha resmi bir ifadeyle, uname -r
çıkışı aşağıdaki normal ifadeyle ayrıştırılır
(zzz'nin her zaman "android" ile başladığı varsayılır):
^(?P<w>\d+)[.](?P<x>\d+)[.](?P<y>\d+)-(?P<z>android\d+)-(?P<k>\d+).*$
Yoksayılan bilgiler arasında ci.android.com derleme numarası, temel çekirdeğin üzerindeki yama sayısı ve git commit'inin SHA karmaları gibi bilgiler yer alabilir.
libkver
libkver kitaplığı, çekirdek sürümünü veya KMI sürüm dizesini ayrıştırmak için bir C++ arayüzü sağlar. libkver'in sunduğu API'lerin listesi için packages/modules/Gki/libkver/include/kver
bölümüne bakın.
VINTF kontrolleri
Android 11 veya önceki sürümlerde, KMI sürümünün Android sürümü kısmı, cihaz üreticileri tarafından cihaz manifestinde manuel olarak belirtilir. Ayrıntılar için VINTF çekirdek eşleşme kuralları başlıklı makaleyi inceleyin.
Android S'ten itibaren KMI sürümünün Android sürümü kısmı çekirdekten çıkarılabilir ve derleme sırasında cihaz manifestine eklenebilir.
Çekirdek yapılandırma gereksinimleri genellikle değişmediğinden uyumluluk matrisinde k
kodlaması yapılması gerekmez. Ancak, çekirdek yapılandırma gereksiniminin değiştirilmesi gereken nadir durumlarda aşağıdakilerden emin olun:
- Uyumluluk matrisindeki ilgili şart kaldırılır.
- KMI oluşturmaya bağlı yeni koşulları kontrol etmek için ek VTS testleri eklendi.
OTA meta verilerindeki önyükleme görüntüsü sürümü
Önyükleme görüntüsü OTA güncellemesiyle güncellense bile OTA yükü biçimine (payload.bin
) sarılmalıdır. OTA yükü, her bölüm için bir version
alanı kodlar. update_engine
, OTA yükünü işlediğinde bölümün eski sürüme düşürülmediğinden emin olmak için bu alanı karşılaştırır.
Karışıklığı önlemek için OTA meta verilerindeki önyükleme bölümü için version
alanı boot image version
olarak adlandırılır.
Ramdisk her zaman sıfırdan oluşturulduğundan, tüm önyükleme görüntüsünü tanımlamak için ramdisk timestamp kullanmak yeterlidir. Gelecekte eski bir önyükleme görüntüsünü yeni bir çekirdek ikilisine eklemiyorsanız önyükleme görüntüsü sürümünde çekirdek sürümünü kodlamanıza gerek yoktur.
OTA istemcisi, OTA güncellemesinden önce önyükleme görüntüsü sürümünü diğer tüm bölümlerle aynı şekilde kontrol eder.