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

Bu sayfada, genel çekirdek görüntüleri (GKI'ler) için sürüm planı 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 fazla çekirdek sürümünü destekleyebilir. Ç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 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ü 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 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 listelenmektedir.

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

Ayrıntılı bilgi için Linux Kernel Makefiles ("KERNELRELEASE" için arama yapın) bölümüne 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 içinde kernel_version_tuple olarak adlandırılır.

Bu tuple, OTA veya ana hat dahil hiçbir güncellemeyle azaltılmamalıdır.

Çekirdek dalı zzz-w.x android12-5,4 Bu terimin kullanıldığı yer: Yaygın çekirdek dalı türleri.
Sürüm w 5 Bu terim bu dokümanda kullanılmamıştır. Bu değişkene libkver içinde version adı verilir.
Yama düzeyi x 4 Söz konusu terim bu dokümanda kullanılmıyor. Bu değişkene libkver içinde patch_level denir.
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 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, olası olmayan etkinliklerle 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şumu 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ü aşağıdaki gibi 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 ikili dosyası aynı çekirdek sürümüne sahipse bayt bazında aynı olmalıdır.

Çekirdek sürümü; bir KMI sürümü, bir alt seviye ve bir son ekten oluşur. 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. Çekirdek sürümü örneğinde KMI sürümü:

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. Biriyle uyumlu olan DLKM'ler diğeriyle de uyumludur.

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

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 ancak alt düzeyleri sırasıyla Y1 ve Y2 olan 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 çalıştıran bir cihaz Y2'ye güncellenemez.

Yani KMI sürümü değişmezse alt düzey, herhangi bir OTA güncellemesiyle düşürülmemelidir.

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

Tam çekirdek sürümünü, uname -r veya aşağıdaki kod snippet'iyle uname(2) çalıştırarak bulabilirsiniz:

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 doküman bağlamında, çekirdek bilgileri ayıklanırken KMI oluşumundan sonraki her şey 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 arasında ci.android.com derleme numarası, temel çekirdeğin üzerindeki yamalar sayısı ve git commit'inin SHA karmaları gibi bilgiler yer alabilir.

Libkver

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

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ı bölümüne bakın.

Android S'den itibaren, KMI sürümünün Android sürüm kısmı çekirdekten ayıklanabilir ve derleme sırasında cihaz manifestine eklenebilir.

Ç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:

  • İlgili şart, uyumluluk matrisinden 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ü

Önyükleme resmi OTA güncellemesi aracılığıyla güncellense bile OTA yükü biçiminde (payload.bin) sarmalanması gerekir. 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 için OTA meta verilerindeki önyükleme bölümü için version alanına boot image version adı verilir.

Ramdisk her zaman sıfırdan oluşturulduğundan, önyükleme görüntüsünün tamamını tanımlamak için ramdisk zaman damgasını kullanmak 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 istemcisi, OTA güncellemesinden önce önyükleme resmi sürümünü diğer tüm bölümlerle aynı şekilde kontrol eder.