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ü son sürümü ve alt düzey bulunur. Ç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'a göz atın. Kernel Makefiles ("KERNELRELEASE" araması yapı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.
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 seviye 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. Biriyle 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 ancak Y1 ve alt düzeyleri olan iki çekirdek sürümü için 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.