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.
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.