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. Bir Jenerik Çekirdek Görüntü (GKI) çekirdek sürümü olarak adlandırılan farklı bir kimliğe 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 Açıklama
Ç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 dönen değerdir uname .
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 Açıklama
wxy wxy 5.4.42

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

wxy bu belgenin tamamında direkt olarak kullanılır. Bu aynı zamanda yaygın olarak üç parçalı sürüm numarası olarak adlandırılır. VINTF, çekirdek versiyonunda kullanılan terim, özellikle ağırlık, başka terimlerle karışıklığa neden olabilir.

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

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 kullanılır Common çekirdek şube tipleri .
Sürüm w 5 Bu terim bu belgede kullanılmamaktadır. Bu değişken sürüm olarak anılır libkver .
Yama seviyesi x 4 Bu terim bu belgede kullanılmamaktadır. Bu değişken de patch_level olarak adlandırılır libkver .
Android sürümü zzz android12

Bu, çekirdeğin ilişkili olduğu Android (tatlı) sürüm numarasıdır.

Karşılaştırılırken AndroidRelease alanını sayısal kısım karşılaştırma için dize ayıklanı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 cihazdan çekirdek salınımını belirlenmesi .

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

5.4.42-android12-0-00544-ged21d463f856

Açıklama

Ç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

Not alt seviyede olduğunu, y KMI versiyonunun bir parçası değildir. Örneğin Çekirdek sürümü , 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ü 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

Alt düzey, y , aynı KMI sürümü içinde çekirdekdeki salınım düzenini tarif etmektedir.

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ü yürüterek bulunabilir uname -r veya uname(2) aşağıdaki kod parçası ile:

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 teorik çıkış uname -r şu ile ayrıştırılır regex (varsayarak her zaman "android" ile başlar zzz):

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

İhmal bilgiler gibi bilgileri içerebilir ci.android.com yapı numarası, Git bazal çekirdek üstüne yamalar ve SHA karma sayısı işlemek.

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. Ortaya çıkarır libkver, gördükleri API'ler listesi için 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 maç kurallarını .

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şiklik yapmadığından, kodlamak için gerek yoktur k uyumluluk matrisi içinde. 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ü bir güncelleme OTA yoluyla güncellenir bile, o OTA yükü formatında sarılmalıdır payload.bin . OTA yükü, bir kodlayan version , her bölüm için bir alan. Tüm update_engine OTA yükü işleme, bu bölüm indirgenir değildir sağlamak için bu alanı karşılaştırır.

Önlemek karışıklık için version OTA metaverilerde önyükleme bölümü için alan adı verilir boot image version .

Ramdiskin daima sıfırdan kurulu olduğu için, Ramdiski zaman damgası kullanılarak tüm önyükleme görüntüyü açıklamak için 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.