GKI sürüm oluşturma ş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 özgüdür. KMI sürümü ise bir sürümün oluşturulduğu arayüzü temsil eder. KMI sürümü birden fazla çekirdek sürümünü destekleyebilir. Bir ç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 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üklenebilir çekirdek modülleri (DLKM) arasındaki çekirdek modülü arayüzünü (KMI) açıklar.
Alt düzey 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ılı bilgi için Linux Kernel Makefiles (KERNELRELEASE) 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ılmamaktadır. Bu değişkene libkver içinde version adı verilir.
Yama seviyesi x 4 Bu terim bu dokümanda kullanılmamaktadı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 artar.

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

Alt düzey (y), aynı KMI sürümündeki çekirdek sürümlerinin yayınlanma sırasını tanımlar.

Aynı KMI sürümüne sahip ancak alt düzeyleri sırasıyla Y1 ve Y2 olan 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 nedeniyle 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 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 kullanıma 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ı başlıklı makaleyi inceleyin.

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 k değerinin uyumluluk matrisinde kodlanmasına gerek yoktur. Ancak, çekirdek yapılandırma koşulunun değiştirilmesi gerekmesi ihtimaline karşı aşağıdakilerden emin olun:

  • İlgili şart, uyumluluk matrisinden kaldırılır.
  • KMI oluşturmaya bağlı olarak yeni koşulları kontrol etmek için ek VTS testleri eklendi.

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, önyükleme görüntüsünün tamamını açıklamak için ramdisk zaman damgasını 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.