Bu sayfada, genel çekirdek görüntüleri (GKI'ler) için sürümlendirme ş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 özeldir. KMI sürümü ise bir sürümün oluşturulduğu arayüzü temsil eder. KMI sürümleri birden çok ç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 gerekmesi gibi olası olmayan bir durumda, KMI sürümündeki değişikliği yansıtmak için KMI oluşturma işlemi yinelenir.
Şartların özeti
Aşağıdaki tabloda, bu sayfada ve GKI güncellemelerinde kullanılan önemli terimler özetlenmiştir.
Ad | Sembol | Örnek | Açıklama |
---|---|---|---|
Çekirdek sürümü | w.x.y-zzz-k-suffix | 5.4.42-android12-0-foo | Bir GKI sürümü için benzersiz tanımlayıcı. Bu, uname tarafından döndürülen değerdir. |
KMI sürümü | w.x-zzz-k | 5.4-android12-0 | GKI ve 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 listelenmektedir.
Ad | Sembol | Örnek | Açıklama |
---|---|---|---|
w.x.y | w.x.y | 5.4.42 |
Ayrıntılı bilgi için Linux Kernel Makefiles ("KERNELRELEASE" için arama yapın) bölümüne bakın. w.x.y, bu belgede doğrudan kullanılmaktadır. Bu değer, yaygın olarak üç bölümden oluşan sürüm numarası olarak da adlandırılır. VINTF'de kullanılan çekirdek sürümü terimi, özellikle w ile diğer terimler arasında karışıklıklara neden olabilir. Bu değişken, libkver içinde kernel_version_tuple olarak adlandırılır. Bu tuple, OTA veya ana hat dahil hiçbir güncellemeyle azaltılmamalıdır. |
Çekirdek dalı | zzz-w.x | android12-5.4 | Bu terim Yaygın çekirdek dal türleri bölümünde kullanılmaktadır. |
Sürüm | w | 5 | Bu terim bu dokümanda kullanılmamıştır. Bu değişkene libkver içinde version adı verilir. |
Yama düzeyi | x | 4 | Bu terim bu dokümanda kullanılmamıştır. Bu değişkene libkver içinde patch_level denir. |
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 ana hat dahil olmak üzere hiçbir güncellemeyle düşürülmemelidir. |
KMI oluşturma | k | 0 |
Bu, olası olmayan etkinliklerle başa çıkmak için eklenen ek bir sayıdır. Bir güvenlik hatası düzeltmesi, aynı Android sürümünde KMI'da değişiklik yapılmasını gerektiriyorsa KMI oluşumu 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ü aşağıdaki gibi 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 ikili dosyası 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 son ek olmak üzere üç bölümden oluşur. Bu belgenin amaçları doğrultusunda, KMI oluşturulduktan sonraki son ek 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
y
alt düzeyinin KMI sürümünün bir parçası olmadığını unutmayın. Çekirdek sürümü örneğinde KMI sürümü:
5.4-android12-0
Açıklama
KMI sürümü, GKI ile dinamik olarak yüklenebilir ç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üncellemeleri nedeniyle düşürülmemelidir.
Alt düzey
y
adlı alt düzey, aynı KMI sürümündeki çekirdek sürümlerinin yayın sırasını açıklar.
Aynı KMI sürümüne sahip ancak sırasıyla Y1 ve Y2 alt düzeyine 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 çalıştıran bir cihaz Y2'ye güncellenemez.
Yani KMI sürümü değişmezse alt düzey, OTA güncellemesi tarafından düşürülmemelidir.
Bir cihazdaki çekirdek sürümünü belirleme
Tam çekirdek sürümünü, uname -r
veya aşağıdaki kod snippet'iyle uname(2)
ç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şumundan sonraki her şey yoksayılır. Daha resmi bir ifadeyle, uname -r
sonucu aşağıdaki normal ifadeyle ayrıştırılır (zzz 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 yamalar 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'ın 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ılı bilgi için VINTF çekirdek eşleşme kuralları bölümüne bakın.
Android S'den itibaren KMI sürümünün Android sürümü kısmı çekirdekten ayıklanabilir ve derleme sırasında cihaz manifestine eklenebilir.
Çekirdek yapılandırma gereksinimleri genellikle değişmediğinden, uyumluluk matrisinde k
kodlamasına gerek yoktur. Ancak, çekirdek yapılandırma koşulunun değiştirilmesi gerektiğinde (olasılığı düşük bir durumdur) aşağıdakilerden emin olun:
- İlgili şart, uyumluluk matrisinden kaldırılır.
- KMI nesline bağlı yeni koşulları kontrol etmek için ek VTS testleri eklenmiştir.
OTA meta verilerinde önyükleme resmi sürümü
Önyükleme resmi OTA güncellemesi aracılığıyla güncellense bile OTA yükü biçiminde (payload.bin
) sarmalanması gerekir. OTA yükü, her bölüm için bir version
alanı kodlar. update_engine
, OTA yükü işlediğinde, bölümün sürümünün 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ına boot image version
adı verilir.
Ramdisk her zaman sıfırdan oluşturulduğundan, tüm başlatma görüntüsünü tanımlamak için ramdisk zaman damgası kullanmak yeterlidir. Gelecekte eski bir önyükleme görüntüsünü yeni bir çekirdek ikilisine eklemediğiniz sürece, çekirdek sürümünü önyükleme resmi sürümünde kodlamanız gerekmez.
OTA istemcisi, OTA güncellemesinden önce önyükleme resmi sürümünü diğer tüm bölümlerle aynı şekilde kontrol eder.