GKI sürüm oluşturma şeması

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.

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