GKI Sürüm Oluşturma

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

Bu sayfada, Genel Çekirdek Görüntüleri (GKI'ler) için sürüm oluşturma şeması açıklanmaktadır. Bir 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ü arabirimi (KMI) sürümü ve alt düzeyden oluşur. Çekirdek sürümü, yayınlanan görüntüye özeldir, oysa KMI sürümü, bir sürümün oluşturulduğu arabirimi temsil eder. Bir KMI sürümü, birden çok ç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 gereken olası bir durumda, KMI sürümündeki değişikliği yansıtmak için KMI üretimi 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-soneki 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ü arabirimini (KMI) açıklar.
alt seviye y 42 Aynı KMI sürümü içindeki çekirdek sürümlerinin yayınlanma sırasını açıklar.

Aşağıdaki tablo, referans olarak diğer ilgili terimleri listeler.

İsim Sembol Örnek Tanım
wxy wxy 5.4.42

Ayrıntılar için, bkz. Linux Kernel Makefiles ("KERNELRELEASE" için arama yapın).

wxy bu belgede doğrudan kullanılır. Bu aynı zamanda yaygın olarak üç parçalı sürüm numarası olarak da adlandırılır. VINTF'de kullanılan terim, çekirdek sürümü , başta w olmak üzere diğer terimlerle karıştırılmasına neden olabilir.

Bu değişken libkver içinde kernel_version_tuple olarak adlandırılır.

Bu demet, OTA veya ana hat dahil olmak üzere herhangi bir güncelleme tarafından 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şken, libkver'de sürüm olarak adlandırılır.
Yama seviyesi x 4 Bu terim bu belgede kullanılmamaktadır. Bu değişken, libkver'de patch_level olarak adlandırılır .
Android sürümü zzz android12

Bu, çekirdeğin ilişkili olduğu 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 dahil olmak üzere herhangi bir güncelleme tarafından düşürülmemelidir.

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, aynı Android sürümü içinde KMI'de değişiklik gerektiriyorsa, KMI üretimi artırılır.

KMI nesil numarası 0 ile başlar.

Sürüm oluşturma tasarımı

Çekirdek sürümü

Tanım

GKI ile birlikte gelen 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ü belirleme .

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, bunlar bayt bazında aynı olmalıdır.

Bir çekirdek sürümü, bir KMI sürümü, bir alt düzey ve bir son ekten oluşur. Bu belgenin amaçları doğrultusunda, KMI oluşturulmasından sonraki son ek yok sayılır.

KMI sürümü

Tanım

KMI sürümü şu şekilde tanımlanır:

KmiVersion :=
Version.PatchLevel-AndroidRelease-KmiGeneration
w      .x         -zzz           -k

Alt düzey olan y KMI sürümünün bir parçası olmadığını unutmayın. Çekirdek sürümündeki örnek için KMI sürümü:

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ü arabirimini (KMI) açıklar.

İki çekirdek sürümü aynı KMI sürümüne sahipse, aynı çekirdek modülü arabirimini uygularlar. Biriyle uyumlu olan DLKM'ler diğeriyle de uyumludur.

KMI sürümü, herhangi bir OTA güncellemesi tarafından düşürülmemelidir.

alt seviye

y alt düzeyi, aynı KMI sürümü içindeki çekirdek sürümlerinin yayınlanma sırasını açıklar.

Aynı KMI sürümüne sahip ancak sırasıyla alt düzey Y1 ve Y2'ye sahip iki çekirdek sürümü için:

  • Y1, Y2'den küçük veya ona 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şmiyorsa, herhangi bir OTA güncellemesi ile alt seviye düşürülmemelidir.

Bir cihazdan çekirdek sürümünü belirleme

Tam çekirdek sürümü, aşağıdaki kod parçacığıyla uname -r veya uname(2) yürütülerek 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 ayıklanırken KMI üretiminden sonraki her şey yok sayılır. Daha resmi olarak, uname -r çıktısı aşağıdaki regex ile ayrıştırılır (zzz'nin her zaman "android" ile başladığını varsayarsak):

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

Yok sayılan bilgiler, ci.android.com yapı numarası, temel çekirdeğin üzerindeki yamaların sayısı ve git taahhüdünün SHA karmaları gibi bilgileri içerebilir.

libkver

Kitaplık, libkver, çekirdek yayınını veya bir KMI sürüm dizesini ayrıştırmak için bir C++ arabirimi sağlar. libkver'ın sunduğu API'lerin bir 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 yayın bölümü, cihaz üreticileri tarafından cihaz bildiriminde manuel olarak belirtilir. Ayrıntılar için bkz. VINTF çekirdek eşleşme kuralları .

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

Çekirdek yapılandırma gereksinimleri genellikle değişmediğinden, uyumluluk matrisi içinde k kodlamaya gerek yoktur. Ancak, çekirdek yapılandırma gereksiniminin değiştirilmesinin gerektiği pek olası olmayan bir durumda, aşağıdakilerden emin olun:

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

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

Önyükleme görüntüsü bir güncelleme OTA aracılığıyla güncellense bile, OTA yük biçiminde, payload.bin içinde sarılmalıdır. OTA yükü, her bölüm için bir version alanını kodlar. update_engine bir OTA yükünü 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, tüm önyükleme görüntüsünü tanımlamak için ramdisk zaman damgasını kullanmak yeterlidir. Eski bir önyükleme görüntüsünü gelecekte yeni bir çekirdek ikili dosyasına dikmedikçe, önyükleme görüntüsü sürümünde çekirdek sürümünü kodlamaya 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.