GKI Sürüm Oluşturma

Bu sayfada Genel Çekirdek Görüntüleri (GKI'ler) için sürüm oluşturma şeması açıklanmaktadır. Genel Çekirdek Görüntüsünün (GKI), çekirdek sürümü adı verilen benzersiz bir tanımlayıcısı vardır. Çekirdek sürümü, çekirdek modülü arayüzü (KMI) sürümünden ve alt seviyeden oluşur. Çekirdek sürümü, yayınlanan görüntüye özeldir; KMI sürümü ise sürümün oluşturulduğu arayüzü temsil eder. Bir 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ştirilmesinin gerektiği beklenmedik bir durumda, KMI üretimi, KMI sürümündeki değişikliği yansıtacak şekilde yinelenir.

Terimlerin özeti

Aşağıdaki tablo, bu sayfada ve GKI güncellemeleri için kullanılan önemli terimleri özetlemektedir.

İsim Sembol Örnek Tanım
Çekirdek sürümü wxy-zzz-k-son eki 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ü wx-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 seviye sen 42 Aynı KMI sürümü içindeki çekirdek sürümlerinin yayın sırasını açıklar.

Aşağıdaki tabloda referans olarak diğer ilgili terimler listelenmektedir.

İsim Sembol Örnek Tanım
wxy wxy 5.4.42

Ayrıntılar için Linux Çekirdeği Makefiles dosyasına bakın ("KERNELRELEASE" ifadesini arayın).

wxy bu belgenin tamamında doğrudan kullanılmıştır. Buna genellikle üç parçalı sürüm numarası da denir. VINTF'de kullanılan çekirdek sürümü terimi, diğer terimlerle, özellikle de w ile karışıklığa neden olabilir.

Bu değişkene libkver'da kernel_version_tuple adı verilir.

Bu demet, OTA veya ana hat da dahil olmak üzere hiçbir güncellemeyle azaltılmamalıdır.

Çekirdek dalı zzz-wx android12-5.4 Bu terim Ortak çekirdek dal türlerinde kullanılır.
Sürüm w 5 Bu terim bu belgede kullanılmamaktadır. Bu değişkene libkver'da versiyon adı verilir.
Yama seviyesi X 4 Bu terim bu belgede kullanılmamaktadır. Bu değişkene libkver'da 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ını karşılaştırırken, karşılaştırma için sayısal kısım dizeden çıkarılır.

Android sürüm numarası, OTA veya ana hat da dahil olmak üzere hiçbir güncellemeyle azaltılmamalıdır.

KMI üretimi k 0

Bu, beklenmedik olaylarla 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şturma sayısı artırılır.

KMI oluşturma numarası 0 ile başlar.

Versiyonlama tasarımı

Çekirdek sürümü

Tanım

GKI ile birlikte gönderilen cihazlar için ç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 bkz. Bir aygıttan çekirdek sürümünün belirlenmesi .

Aşağıda bir çekirdek sürümü örneği verilmiştir.

5.4.42-android12-0-00544-ged21d463f856

Tanım

Çekirdek sürümü, bir GKI sürümünün benzersiz kimliğidir. İki GKI ikili dosyası aynı çekirdek sürümüne sahipse bayt bazında aynı olmaları gerekir.

Bir çekirdek sürümü bir KMI sürümünden, bir alt seviyeden ve bir son ekten oluşur. Bu belgenin amaçları doğrultusunda, KMI oluşturulmasından sonraki son ek dikkate alınmaz.

KMI sürümü

Tanım

KMI sürümü şu ş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. Örneğin Çekirdek sürümündeki KMI sürümü şöyledir:

5.4-android12-0

Tanım

KMI sürümü, GKI ile dinamik olarak yüklenebilir çekirdek modülleri (DLKM) arasındaki çekirdek modülü arayüzünü (KMI) açıklar.

İki çekirdek sürümü aynı KMI sürümüne sahipse aynı çekirdek modülü arayüzünü uygularlar. Birine uyumlu olan DLKM'ler diğeriyle de uyumludur.

KMI sürümü herhangi bir OTA güncellemesiyle düşürülmemelidir.

Alt seviye

Alt düzey, y , aynı KMI sürümü içindeki ç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 ona eşitse Y1'i çalıştıran cihaz, Y2'ye yönelik bir 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şmiyorsa alt seviyenin herhangi bir OTA güncellemesiyle düşürülmemesi gerekir.

Bir aygıttan çekirdek sürümünün belirlenmesi

Tam çekirdek sürümü, uname -r veya uname(2) komutunu aşağıdaki kod parçacığıyla çalıştırarak bulunabilir:

std::string get_kernel_release() {
  struct utsname buf;
  return uname(&buf) == 0 ? buf.release : "";
}

Örnek bir çıktı:

5.4.42-android12-0-00544-ged21d463f856

Bu belgenin amacı doğrultusunda, çekirdek bilgileri çıkartılırken KMI oluşturulmasından sonraki her şey göz ardı edilir. Daha resmi olarak, uname -r çıktısı aşağıdaki normal ifadeyle ayrıştırılır (zzz'nin her zaman "android" ile başladığı varsayılarak):

^(?P<w>\d+)[.](?P<x>\d+)[.](?P<y>\d+)-(?P<z>android\d+)-(?P<k>\d+).*$

Göz ardı edilen bilgiler ci.android.com yapı numarası, temel çekirdeğin üstündeki yama sayısı ve git işleminin SHA karmaları gibi bilgileri içerebilir.

libkver

Libkver kütüphanesi, çekirdek sürümünü veya KMI sürüm dizesini ayrıştırmak için bir C++ arayüzü sağlar. Libkver'ın kullanıma sunduğu API'lerin listesi için bkz packages/modules/Gki/libkver/include/kver .

VINTF kontrolleri

Android 11 veya daha eski sürümler için, KMI sürümünün Android sürümü, cihaz üreticileri tarafından cihaz bildiriminde manuel olarak belirtilir. Ayrıntılar için VINTF çekirdek eşleşme kurallarına bakın.

Android S'den, KMI sürümünün Android sürümü çekirdekten çıkarılabilir ve derleme sırasında cihaz bildirimine eklenebilir.

Çekirdek yapılandırma gereksinimleri genellikle değişmediğinden uyumluluk matrisinde k kodlamaya gerek yoktur. Ancak, çekirdek yapılandırma gereksiniminin değiştirilmesinin gerekli olduğu nadir durumlarda aşağıdakilerden emin olun:

  • Uyumluluk matrisinden ilgili gereksinim kaldırılmıştır.
  • KMI üretimine bağlı yeni gereksinimleri kontrol etmek için ek VTS testleri eklenmiştir.

OTA meta verilerinde önyükleme görüntüsü sürümü

Önyükleme görüntüsü bir OTA güncellemesi aracılığıyla güncellense bile, OTA veri yükü biçiminde payload.bin olarak sarılmalıdır. OTA verisi, her bölüm için bir version alanını kodlar. update_engine bir OTA verisini işlediğinde, bölümün eski sürüme geçirilmediğ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ünün version alanına boot image version adı verilir.

Ramdisk her zaman sıfırdan oluşturulduğundan, ramdisk zaman damgasını kullanmak tüm önyükleme görüntüsünü tanımlamak için yeterlidir. Gelecekte eski bir önyükleme görüntüsünü yeni bir çekirdek ikili dosyasına eklemediğiniz sürece, önyükleme görüntüsü sürümünde çekirdek sürümünü kodlamanıza gerek yoktur.

Bir OTA güncellemesinden önce OTA istemcisi, önyükleme görüntüsü sürümünü diğer bölümlerle aynı şekilde kontrol eder.