GKI sürüm şeması

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.

AndroidRelease alanı karşılaştırılırken sayısal kısım, karşılaştırma için diziden çıkarılı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.