GKI Sürüm Oluşturma

Bu sayfada Genel Kernel Görüntüleri (GKI) için sürüm şeması açıklanmaktadır. CEVAP Genel Kernel Görüntüsü (GKI) , çekirdek sürümü adı verilen benzersiz bir tanımlayıcıya sahiptir. Çekirdek sürümü durumunu da öğrenebilirsiniz. Çekirdek sürümü, yayınlanan görüntüye özgüyken KMI sürümü, bir sürümün oluşturulduğu arayüzü temsil eder. KMI sürümü, birden çok çekirdek sürümü yayınladı. Çekirdek sürümü yalnızca bir KMI sürümüne bağlıdır. İçinde KMI, çekirdek modülü arayüzünün değiştirilmesinin gerektiği KMI sürümündeki değişikliği yansıtacak şekilde yinelenir.

Şartların özeti

Aşağıdaki tabloda, bu sayfada kullanılan önemli terimler özetlenmiştir GKI güncellemelerine bakın.

Ad Sembol Örnek Açıklama
Çekirdek sürümü g.x.y-zzz-k-sonek 5.4.42-android12-0-foo Bir GKI sürümü için benzersiz tanımlayıcı. Bu, uname tarafından döndürüldü.
KMI sürümü g.x-zzz-k 5.4-android12-0 GKI ile arasındaki çekirdek modülü arayüzünü (KMI) açıklar Çekirdek modüllerinden (DLKM) emin olun.
Alt düzey y 42 Şuradaki çekirdek sürümlerinin yayın sırasını açıklar: aynı KMI sürümünü kullandığınızdan emin olun.

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

Ad Sembol Örnek Açıklama
g.x.y g.x.y 5.4.42

Ayrıntılı bilgi için Linux Kernel Makefiles sayfasına ("KERNELRELEASE" araması yapın) bakın.

w.x.y doğrudan bu belgede kullanılmıştır. Bu ayrıca Genellikle üç bölümden oluşan sürüm numarası olarak bilinir. Kullanılan terim çekirdek sürümü, diğer terimlerle karışıklığa neden olabilir. özellikle w.

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

Bu değer, OTA veya ana hat.

Çekirdek dalı zzz-w.x android12-5,4 Bu terimin kullanıldığı yer: Yaygın çekirdek dalı türleri.
Sürüm w 5 Söz konusu terim bu dokümanda kullanılmıyor. Bu değişkene libkver'deki version sürümü.
Yama düzeyi x 4 Söz konusu terim bu dokümanda kullanılmıyor. Bu değişkene libkver'de patch_level.
Android sürümü Zzz android12

Bu, çekirdeğin ilişkilendirildiği Android (tatlı) sürüm numarasıdır ekleyebilirsiniz.

AndroidRelease alanı karşılaştırılırken sayısal kısım ayıklanır.

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

KMI oluşturma k 0

Bu, düşük olasılıklarla başa çıkmak için eklenen ek bir sayıdır etkinlikler. Bir güvenlik hatası düzeltmesi için KMI'de değişiklik yapılması gerekiyorsa Android sürümü, KMI nesli artırılmıştır.

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

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

Çekirdek sürümü

Tanım

GKI ile gönderilen cihazlarda çekirdek sürümü aşağıdaki şekilde tanımlanır:

KernelRelease :=
Version.PatchLevel.SubLevel-AndroidRelease-KmiGeneration-suffix
w      .x         .y       -zzz           -k            -something

Daha fazla bilgi için cihaz.

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ü, GKI sürümünün benzersiz kimliğidir. İki GKI ikili değeri aynı çekirdek sürümünü kullanıyorsanız bunların bayt bazında aynı olması gerekir.

Çekirdek sürümü; bir KMI sürümü, bir alt düzey ve bir son ekten oluşur. Örneğin, 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. Örnekteki Çekirdek sürümünde KMI sürümü şu şekildedir:

5.4-android12-0

Açıklama

KMI sürümünde, GKI ve Çekirdek modüllerinden (DLKM) emin olun.

İki çekirdek sürümü aynı KMI sürümüne sahipse aynı çekirdeği uygularlar modülünü kullanabilirsiniz. Bir tanesiyle uyumlu olan DLKM'ler de uyumludur. iletişim kurabilirsiniz.

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

Alt düzey

y adlı alt düzey, aynı KMI sürümünü kullandığınızdan emin olun.

Aynı KMI sürümüne sahip olan ancak alt düzey Y1 ve Sırasıyla Y2:

  • Y1, Y2'den küçükse veya Y2'ye eşitse Y1 çalıştıran bir cihaz Y2'ye güncelleyin.
  • 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 düşürülmemelidir bunu yapabilirsiniz.

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

Tam çekirdek sürümü, uname -r çalıştırılarak bulunabilir veya uname(2) aşağıdaki kod snippet'i ile:

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

Örnek bir çıkış şöyledir:

5.4.42-android12-0-00544-ged21d463f856

Bu belgede, KMI oluşturulduktan sonraki tüm öğeler yoksayılır. . Daha resmi bir ifadeyle, uname -r çıktısı şu şekildedir: şu regex ile ayrıştırılır (zzz'in her zaman "android" ile başladığı varsayılmıştır):

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

Yoksayılan bilgiler ci.android.com derleme numarası, sayısı üzerine yamalar ve git kaydının SHA karmaları.

Libkver

libkver kitaplığı, çekirdek sürümünü ayrıştırmak için bir C++ arayüzü veya KMI sürümü dizesi. libkver'ın sunduğu API'lerin listesi için bkz. packages/modules/Gki/libkver/include/kver.

VINTF kontrolleri

Android 11 veya önceki sürümlerde KMI sürümünün Android sürümü Cihaz manifestinde, cihaz üreticileri tarafından manuel olarak belirtilir. Ayrıntılı bilgi için VINTF çekirdek eşleşme kurallarını inceleyin.

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

Çekirdek yapılandırma gereksinimleri genellikle değişmediğinden k'nin uyumluluk matrisinde kodlanması gerekir. Ancak çok da Bu gibi durumlarda, çekirdek yapılandırmasıyla ilgili gereksinimlerin değiştirilmesi şu:

  • Uyumluluk matrisinden ilgili koşul kaldırılır.
  • Koşula bağlı yeni koşulları kontrol etmek için ek VTS testleri eklendi KMI neslinde çalıştım.

OTA meta verilerinde başlatma görüntüsü sürümü

Başlatma görüntüsü OTA bir güncelleme aracılığıyla güncellense bile payload.bin OTA yükü biçiminde sarmalanır. OTA yükü bir Her bölüm için version alanı. 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 amacıyla OTA'da başlatma bölümü için version alanını kullanın. meta veriye boot image version denir.

Ramdisk her zaman sıfırdan yapıldığından, ramdisk timestamp, başlatma görüntüsünün tamamını tanımlamak için yeterlidir. Herhangi bir eski bir sürümü birleştirmediğiniz sürece, çekirdek sürümünü başlatma görüntüsü sürümünde kodlama yeni bir çekirdek ikili programı için önyükleme yapılır.

OTA güncellemesinden önce, OTA istemcisi başlatma görüntüsü sürümünü kontrol eder olduğu gibi kullanabilirsiniz.