Genel Çekirdek Görüntüsü

Android Ortak içleri (ACKs) Tüm Android ürün çekirdekleri temelini oluşturur. Satıcı ve cihaz çekirdekleri, ACK'lerin akış aşağısındadır. Satıcılar, çekirdek kaynak kodunu değiştirerek ve aygıt sürücüleri ekleyerek SoC'ler ve çevre birimleri için destek ekler. Bu modifikasyonlar noktasına, geniş olabilir bir cihaz üzerinde çalışan kod kadar% 50 dışı ağacı kodu olarak (yukarı tarafında değil, Linux veya AOSP ortak içlerden).

Böylece, bir aygıt çekirdeği şunlardan oluşur:

  • Yukarı akış: kernel.org'dan Linux çekirdeği
  • AOSP: AOSP ortak çekirdeklerinden Android'e özgü ek yamalar
  • Satıcı: Satıcılardan SoC ve çevre birimi etkinleştirme ve optimizasyon yamaları
  • OEM/cihaz: Ek aygıt sürücüleri ve özelleştirmeler

Neredeyse her cihazın özel bir çekirdeği vardır. Bu çekirdek parçalanmasıdır.

Android çekirdek hiyerarşisi parçalanmaya yol açar

Şekil parçalanma 1. Android çekirdek hiyerarşi potansiyel müşteriler

Parçalanma maliyetleri

Çekirdek parçalanmasının Android topluluğu üzerinde birkaç olumsuz etkisi vardır.

Güvenlik güncellemeleri emek yoğundur

Güvenlik yamaları atıf Android Güvenlik Bülteni (ASB) cihaz çekirdekleri her birine backported edilmelidir. Ancak, çekirdek parçalanması nedeniyle, güvenlik düzeltmelerini sahada Android cihazlara yaymak aşırı derecede pahalıdır.

Uzun Süreli Desteklenen güncellemeleri birleştirmek zor

Uzun Vadeli Desteklenen (LTS) sürümleri güvenlik düzeltmelerini ve diğer kritik hata düzeltmeleri içermektedir. LTS sürümleriyle güncel kalmanın, güvenlik düzeltmeleri sağlamanın en etkili yolu olduğu kanıtlanmıştır. Pixel cihazlarda, ASB'de bildirilen çekirdek güvenlik sorunlarının %90'ının güncel kalan cihazlar için zaten giderildiği keşfedildi.

Ancak, aygıt çekirdeklerindeki tüm özel değişikliklerle, LTS düzeltmelerini aygıt çekirdekleriyle birleştirmek zordur.

Android platformu sürüm yükseltmelerini engeller

Parçalanma, alandaki cihazlara çekirdek değişikliklerinin eklenmesini gerektiren yeni Android özelliklerini zorlaştırıyor. Android Framework kodu, beş adede kadar çekirdek sürümünün desteklendiğini ve yeni platform sürümü için hiçbir çekirdek değişikliği yapılmadığını varsaymalıdır (Android 10, bazı durumlarda henüz uygulanmamış olan 3.18, 4.4, 4.9, 4.14 ve 4.19 çekirdeklerini destekler). 2017'de Android 8'den bu yana yeni özelliklerle geliştirildi).

Yukarı akış Linux'a çekirdek değişikliklerine katkıda bulunmak zor

Çekirdeğe yapılan tüm değişikliklerle, çoğu amiral gemisi cihazı, zaten en az 18 aylık bir çekirdek sürümüyle birlikte gelir. Örneğin, 4.14 çekirdek tarafından serbest bırakıldı kernel.org 2017 yılı Kasım ve 2019 baharında sevk 4.14 çekirdekleri kullanarak ilk Android telefonlarda.

Yukarı akış çekirdek sürümü ve ürünler arasındaki bu uzun gecikme, Android topluluğunun gerekli özellikleri ve sürücüleri yukarı akış çekirdeklerine beslemesini zorlaştırıyor, bu nedenle parçalanma sorununu çözmek zor.

Parçalanmayı düzeltme: Genel Çekirdek Görüntüsü

Çekirdek çekirdek birleştirici ve yüklenebilir modülleri içine çekirdek çekirdeğin dışına SoC'u ve yönetim kurulu destek taşıyarak Jenerik Çekirdek Görüntü (GKI) projesi adresleri çekirdek parçalanması. GKI çekirdek hediyeler modülleri ve çekirdek bağımsız güncellenebilir böylece çekirdek modülleri için istikrarlı Çekirdek Modülü Arayüzü (KMI).

GKI:

  • ACK kaynaklardan inşa edilmiştir.
  • tek çekirdek ikili artı (şu anda sadece arm64 LTS sürümü başına mimarisi başına yüklenebilir modülleri, ilişkili android11-5.4 ve android12-5.4 ).
  • İlişkili ACK için desteklenen tüm Android Platformu bültenleri ile test edilir. GKI çekirdek sürümünün kullanım ömrü boyunca özellik kullanımdan kaldırılması yoktur
  • Belirli bir LTS içinde sürücülere istikrarlı KMI vücuduna.
  • SoC- veya tahta özel kodu içermez.

GKI uygulanmış bir Android cihazının nasıl göründüğü aşağıda açıklanmıştır.

GKI mimarisi

Şekil 2. GKI mimarisi

GKI, Android 11 platform sürümündeki v5.4 çekirdeklerinden başlayarak birkaç aşamada kullanıma sunulacak karmaşık bir değişikliktir.

GKI 1.0 — GKI uyumluluk gereksinimleri

Android 11 platform sürümüyle başlatılan bazı cihazlarda Tiz uyumluluğu, v5.4 çekirdekleri çalıştıran cihazlar için GKI testi gerektirir.

GKI uyumluluk testi için bölümler

GKI uyumluluk testleri için Şekil 3. Bölme

Cihaz geçtiği GKI uyumluluk aracı VTS ve CTS-on-GSI Genel sistemi görüntüsü (CBS) ve içine GKI önyükleme görüntü yanıp yüklü GKI çekirdek ile + GKI testleri boot Bölümün GSI sistemi görüntü system bölümü. Cihazlar Farklı bir ürün kernel ile yollayabilirsiniz ve GKI sağlamadığını yüklenebilir modülleri kullanabilirsiniz. Ancak, ürün ve GKI çekirdekleri de aynı mesafede modülleri yüklemek gerekir vendor_boot ve vendor bölümleri. Bu nedenle, tüm ürün çekirdeklerinin aynı ikili çekirdek modülü arabirimine (KMI) sahip olması gerekir. Satıcılar, GKI KMI ile uyumlu kaldığı sürece ürün çekirdekleri için KMI'yı genişletebilir. GKI 1.0'da satıcı modüllerinin yüklenemez olması şartı yoktur.

GKI 1.0 hedefleri

  • Ürün çekirdeği GKI çekirdeği ile değiştirildiğinde, VTS veya CTS'de gerilemeler başlatmayın.
  • AOSP ortak çekirdekleriyle güncel kalmak için OEM'lerin ve satıcıların çekirdek bakım yükünü azaltın.
  • Bir cihazın yeni bir Android platformu sürümüne yükseltilip yükseltilmediği veya yeni başlatıldığı fark etmeksizin, çekirdek Android değişikliklerini çekirdeklere dahil edin.
  • Android kullanıcı alanını asla bozmayın.
  • Donanıma özgü bileşenleri, yüklenebilir modüller olarak çekirdek çekirdekten ayırın.

GKI 2.0 - GKI ürünleri

Android 12 (2021) ile fırlatma platformu bırakma kullanarak çekirdek versiyonları V5.10 veya üstü GKI çekirdeği ile gemiye gerekli olduğunu Bazı cihazlar. Onaylı önyükleme görüntüleri, LTS ve kritik hata düzeltmeleri ile düzenli olarak kullanıma sunulacak ve güncellenecektir. KMI için ikili istikrar korunacağından, bu önyükleme yansımaları, satıcı imajlarında herhangi bir değişiklik yapılmadan kurulabilir.

GKI 2.0 hedefleri

  • GKI ile önemli performans veya güç regresyonları sunmayın.
  • OEM'lerin, satıcı müdahalesi olmadan çekirdek güvenlik düzeltmeleri ve hata düzeltmeleri (LTS) sunmasını sağlayın.
  • Cihazlar için ana çekirdek sürümünü güncelleme maliyetini azaltın (örneğin, v5.10'dan 2021 LTS çekirdeğine).
  • Yükseltme için net bir süreçle çekirdek sürümlerini güncelleyerek mimari başına yalnızca bir GKI çekirdek ikili dosyasını koruyun.

GKI 2.0 boot.img entegrasyonu

Sertifikalı GKI dahil etmek Şu levha değişkenleri ayarlayın boot.img sizin kod temeli haline. Aşağıda gösterilen ayar, yalnızca cihaz başına ayarlanması gereken bir örnektir.

# Uses a prebuilt boot.img
TARGET_NO_KERNEL := true
BOARD_PREBUILT_BOOTIMAGE := device/${company}/${board}/boot.img

# Enables chained vbmeta for the boot.img so it can be updated independently,
# without updating the vbmeta.img. The following configs are optional.
# When they're absent, the hash of the boot.img will be stored then signed in
# the vbmeta.img.
BOARD_AVB_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
BOARD_AVB_BOOT_ALGORITHM := SHA256_RSA4096
BOARD_AVB_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION := 2

GKI tasarımı

KMI çekirdek dalları

GKI çekirdekleri ayrıntılı olarak açıklanmıştır ACK KMI çekirdek dalları, inşa edilir Android Ortak çekirdeklerde . Dallar adlandırılır böylece KMI benzersiz, çekirdek sürümü Android platformu serbest bırakılması ile tanımlanır <androidRelease>-<kernel version> . Örneğin, Android 11 5.4 KMI çekirdek şube adlandırılır android11-5.4. İki ek KMI, çekirdekleri olacak (sadece yeni dallanma modeli gelecekte ilerleme edeceğini vurgulamak kararlıdır ve gösterilmemiştir) Android 12 bu beklenir android12-5.4 ve Aralık ayında yayımlanan 5.10 LTS çekirdeği dayalı ikinci bir çekirdek, 2020.

KMI çekirdek hiyerarşisi

Şekil 4, 5.10 KMI çekirdekleri için dal hiyerarşisini göstermektedir. android12-5.10 Android 12 ve karşılık gelen KMI çekirdeğidir android13-5.10 Android T karşılık gelmektedir (AOSP deneysel) (kararlı ve sadece yeni dallanma modeli gelecekte ilerleme göstermek için gösterilmemiştir).

5.10 için KMI çekirdek hiyerarşisi

5.10 için Şekil 4. KMI çekirdek hiyerarşisi

Şekil 4'te gösterildiği gibi, üç aşamadan KMI dalları döngüsü: geliştirme (sapma), stabilizasyon (levha) ve dondurulmuş. Bu aşamalar ayrıntılı olarak açıklanmıştır Android Ortak çekirdeklerde .

KMI çekirdeği dondurulduktan sonra, kararlı KMI'yi etkilemeden hafifletilemeyecek ciddi bir güvenlik sorunu tanımlanmadıkça KMI'yi bozan hiçbir değişiklik kabul edilmez. Dal tüm ömrü boyunca donmuş halde kalır.

Mevcut KMI bozulmadığı sürece hata düzeltmeleri ve iş ortağı özellikleri donmuş bir şubeye kabul edilebilir. KMI, mevcut KMI'yi oluşturan arayüzler etkilenmediği sürece yeni dışa aktarılan sembollerle genişletilebilir. KMI'ye yeni arayüzler eklendiğinde, hemen kararlı hale gelirler ve gelecekteki değişikliklerle bozulamazlar.

Örneğin, bir KMI arabirimi tarafından kullanılan bir yapıya alan ekleyen bir değişikliğe, arabirim tanımını değiştirdiği için izin verilmez:

struct foo {
  int original_field1;
  int original_field2;
  int new_field; // Not allowed
};

int do_foo(struct foo &myarg)
{
  do_something(myarg);
}
EXPORT_SYMBOL_GPL(do_foo);

Ancak, yeni bir işlev eklemek iyidir:

struct foo_ext {
  struct foo orig_foo;
  int new_field;
};

int do_foo2(struct foo_ext &myarg)
{
  do_something_else(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);

KMI kararlılığı

GKI hedeflerini gerçekleştirmek için sürücüler için istikrarlı bir KMI'yi sürdürmek çok önemlidir. GKI çekirdeği ikili biçimde oluşturulur ve gönderilir, ancak satıcı tarafından yüklenebilir modüller ayrı bir ağaçta oluşturulur. Ortaya çıkan GKI çekirdeği ve modülleri, birlikte oluşturulmuş gibi çalışmalıdır. GKI uyumluluk testi için, çekirdeği içeren önyükleme görüntüsü, GKI çekirdeğini içeren bir önyükleme görüntüsü ile değiştirilir ve satıcı görüntüsündeki yüklenebilir modüller, her iki çekirdekle de doğru şekilde çalışmalıdır.

KMI, çekirdekteki tüm sembolleri veya hatta 30.000'den fazla dışa aktarılan sembolün tamamını içermez. Bunun yerine, modüller tarafından kullanılabilen semboller, çekirdek ağacının kökünde halka açık olarak tutulan bir dizi sembol listesi dosyasında açıkça listelenir. Tüm sembol listesi dosyalarındaki tüm sembollerin birleşimi, kararlı olarak muhafaza edilen KMI sembolleri setini tanımlar. Bir örnek simge listesi dosyasıdır abi_gki_aarch64_db845c için gerekli sembolleri beyan, DragonBoard 845C .

Sadece bir sembol listesinde listelenen semboller ve bunların ilgili yapıları ve tanımları KMI'nin bir parçası olarak kabul edilir. İhtiyacınız olan semboller mevcut değilse, değişiklikleri sembol listelerinize gönderebilirsiniz. Yeni arayüzler bir sembol listesine girdikten ve bu nedenle KMI tanımının bir parçası olduktan sonra, kararlı olarak korunurlar ve dal dondurulduktan sonra sembol listesinden çıkarılmamalı veya değiştirilmemelidir.

Her KMI çekirdek ağacının kendi sembol listesi seti vardır. Farklı KMI çekirdek dalları arasında ABI kararlılığı sağlamak için hiçbir girişimde bulunulmaz. Örneğin, KMI'ın android11-5.4 KMI'ın tamamen bağımsızdır android12-5.4 .

Genellikle, Linux topluluğu olan çekirdekteki ABI istikrar, hoş ana hat çekirdeği için. Farklı araç zincirleri, konfigürasyonlar ve sürekli gelişen bir Linux ana hat çekirdeği karşısında, ana hatta sabit bir KMI sağlamak mümkün değildir. Ancak, son derece kısıtlı GKI ortamında mümkündür. Kısıtlamalar şunlardır:

  • KMI (örneğin, aynı LTS çekirdek içinde dengelidir android11-5.4 ).
    • Resim KMI stabilite muhafaza edilir android-mainline .
  • Yalnızca belirli Clang araç zinciri AOSP verilen ve ilgili şube için tanımlanan çekirdek ve modülleri oluşturmak için kullanılır.
  • Yalnızca bir sembol listesinde belirtildiği gibi modüller tarafından kullanıldığı bilinen semboller, kararlılık ve dikkate alınan KMI sembolleri için izlenir.
    • Bunun doğal sonucu, modüllerin yalnızca KMI sembollerini kullanması gerektiğidir. Bu, KMI olmayan sembollerin gerekli olması durumunda başarısız modül yükleri tarafından zorlanır.
  • KMI şubesi dondurulduktan sonra, aşağıdakiler dahil hiçbir değişiklik KMI'yi bozamaz:
    • Yapılandırma değişiklikleri
    • Çekirdek kodu değişiklikleri
    • Araç zinciri değişiklikleri (güncellemeler dahil)

KMI izleme

ABI izleme araçları presubmit test sırasında KMI stabilitesinin gözlenmesi. KMI'yi bozan değişiklikler ön gönderim testinde başarısız olur ve uyumlu olması için yeniden çalışılması gerekir. Bu araçlar, yapı süreçlerine entegrasyon için iş ortaklarına ve halka açıktır. Android çekirdek ekibi, geliştirme sırasında ve LTS sürümlerini birleştirirken KMI kesintilerini bulmak için bu araçları kullanır. Bir LTS birleştirmesi sırasında bir KMI arızası tespit edilirse, KMI, sorunlu yamalar kaldırılarak veya yamalar uyumlu olacak şekilde yeniden düzenlenerek korunur.

Mevcut bir KMI sembolü uyumsuz bir şekilde değiştirilirse KMI bozuk olarak kabul edilir. Örnekler:

  • KMI işlevine yeni argüman eklendi
  • Bir KMI işlevi tarafından kullanılan bir yapıya eklenen yeni alan
  • Bir KMI işlevi tarafından kullanılan numaralandırmaların değerlerini değiştiren yeni numaralandırma değeri eklendi
  • KMI'yı etkileyen veri üyelerinin varlığını değiştiren konfigürasyon değişikliği

Yeni sembollerin eklenmesi mutlaka KMI'yi bozmaz, ancak kullanılan yeni sembollerin bir sembol listesine ve ABI gösterimine eklenmesi gerekir. Aksi takdirde, KMI'nın bu bölümünde gelecekte yapılacak değişiklikler tanınmayacaktır.

İş ortaklarının, ürün çekirdeği ile GKI çekirdeği arasındaki KMI'yi karşılaştırmak ve uyumlu olduklarından emin olmak için ABI izleme araçlarını kullanmaları beklenir.

Son android11-5.4 ikili GKI çekirdek indirilebilir ci.android.com ( kernel_aarch64 oluşturur).

Tek derleyici

Bir derleyici değişikliği, ABI'yi etkileyen dahili çekirdek veri yapısı düzenini değiştirebilir. KMI'yi sabit tutmak kritik olduğundan, GKI çekirdeğini oluşturmak için kullanılan araç zinciri, satıcı modülleri oluşturmak için kullanılan araç zinciriyle tamamen uyumlu olmalıdır. GKI çekirdeği, AOSP'de bulunan LLVM araç zinciri ile oluşturulmuştur.

Android 10'dan itibaren, tüm Android çekirdekleri bir LLVM araç zinciri ile oluşturulmalıdır. GKI ile, ürün çekirdekleri ve satıcı modülleri oluşturmak için kullanılan LLVM araç zinciri, AOSP'nin LLVM araç zinciri ile aynı ABI'yi oluşturmalı ve iş ortakları, KMI'nin GKI çekirdeği ile uyumlu olmasını sağlamalıdır.

Android çekirdek kurulumu belgeleri referans GKI çekirdeği inşa edildiğini anlatmaktadır. Özellikle belgelenen prosedür, çekirdeği oluşturmak için doğru araç zincirinin ve yapılandırmanın kullanılmasını sağlar. Alt iş ortaklarının, araç zinciri veya diğer oluşturma zamanı bağımlılıklarından kaynaklanan uyumsuzluklardan kaçınmak için son çekirdeği üretmek için aynı araçları kullanmaları önerilir.

Çekirdek yapılandırmaları

GKI çekirdeği kullanılarak inşa edilmiştir arch/arm64/configs/gki_defconfig . Bu yapılandırmalar KMI'yi etkilediğinden, GKI yapılandırmaları çok dikkatli bir şekilde yönetilir. Dondurulmuş KMI çekirdekleri için, yapılandırmalar yalnızca KMI üzerinde herhangi bir etki yoksa eklenebilir veya kaldırılabilir.

GKI çekirdeği, çeşitli cihazlarda çalışacak şekilde yapılandırılmalıdır. Bu nedenle, donanımı etkinleştirmek için kullanılan yüklenebilir modüller hariç, tüm bu cihazlar için gereken tüm alt sistemler ve seçenekler için yerleşik desteğe sahip olmalıdır. Ortaklar gereken gerekli yapılandırma değişiklikleri yapmasını talep dev çekirdeklerinde.

Önyükleme değişiklikleri

GKI ve satıcı bileşenleri arasında temiz bir ayrım kolaylaştırmak için, boot bölümü çekirdek ve GKI modülleri ile bir ramdisk'in dahil olmak üzere yalnızca jenerik bileşenler içerir. Önyükleme başlığının (v3) yeni bir sürümü, GKI mimarisiyle uyumluluğu belirtmek için tanımlanmıştır. Önyükleme görüntülerinin GKI sürümü Google tarafından sağlanır ve GKI uyumluluğu test edilirken satıcının önyükleme görüntüsünün sürümünün yerini alır.

İlk aşama için ramdisk init , recovery ve fastbootd bir olduğunu initramfs bootloader ile birleştirilmiş iki CPIO arşiv meydana görüntüsü. Birinci CPIO arşiv yeni gelen vendor_boot bölümü. İkinci gelen boot bölümü.

Değişikliklerin bir özeti burada verilmiştir. Bkz Satıcı önyükleme bölümünü detayları için.

Önyükleme bölümü

boot bölümü bir başlık, çekirdek içerir ve bir CPIO önyükleme ramdisk'in jenerik kısmının arşiv.

Bir önyükleme başlık v3 ile boot bölümü, önceden bu bölümler boot bölümü artık mevcut:

  • İkinci aşama önyükleyici: Bir aygıtın ikinci aşama önyükleyicisi varsa, kendi bölümünde saklanması gerekir.
  • DTB: DTB depolanan Satıcı önyükleme bölümü .

boot bölümü GKI bileşenleri ile bir CPIO arşivi içerir:

  • Bulunan GKI çekirdek modülleri /lib/modules/
  • first_stage_init ve bağlı kütüphaneler
  • fastbootd ve recovery (A / B ve sanal A'da kullanılan / B cihazları)

GKI önyükleme görüntü Google tarafından sağlanan ve için kullanılmalıdır GKI uyumluluk testleri .

Arm64 son android11-5.4 boot.img indirilebilir ci.android.com içinde aosp_arm64 oluşumunu eserler aosp-master dalında.

Son arm64 android11-5.4 çekirdek görüntü ( Image.gz ) indirilebilir ci.android.com içinde kernel_aarch64 oluşumunu eserler aosp_kernel-common-android11-5.4 dalı.

Satıcı önyükleme bölümü

vendor_boot bölüm GKI ile tanıtıldı. Virtual A/B ile A/B'd'dir ve bir başlık, satıcı ramdiski ve aygıt ağacı bloğundan oluşur. Satıcı ramdiski, aygıt önyüklemesi için gerekli satıcı modüllerini içeren bir CPIO arşividir. Bu, kritik SoC işlevselliğini etkinleştirmek için modüllerin yanı sıra aygıtı başlatmak ve açılış ekranlarını görüntülemek için gereken depolama ve ekran sürücülerini içerir.

CPIO arşivi şunları içerir:

  • Birinci aşama init satıcı çekirdek modülleri bulunan /lib/modules/
  • modprobe yapılandırma bulunan dosyaları /lib/modules
  • modules.load birinci aşama sırasında yüke modülleri gösteren dosya init

Önyükleyici gereksinimi

Bootloader (den jenerik ramdiskin CPIO resim yüklemek gerekir boot bölümü derhal (gelen satıcı ramdiskin CPIO görüntüsü aşağıdaki belleğe) vendor_boot bölümü ). Açtıktan sonra, sonuç, satıcı ramdisk'inin dosya yapısının üzerine yerleştirilmiş genel ramdisk'tir.

GKI uyumluluk testi

Android 11 platform sürümü için, v5.4 çekirdeğiyle başlatılan cihazların, Google tarafından sağlanan GKI önyükleme görüntüsünü kullanarak VTS ve GSI üzerinde CTS testlerini çalıştırması gerekir.

GKI çekirdeğine katkıda bulunmak

GKI çekirdeği ile başlayan AOSP Ortak Çekirdeğin inşa edilmiştir android11-5.4 . Gönderilen tüm yamalar uygun olmalıdır bu katkı yönergelerine iki stratejiyi belge,:

  1. En: Linux akıntıya karşı tüm değişiklikleri yapın. Uygunsa, kararlı sürümlere geri dönün. Bu yamalar, karşılık gelen AOSP ortak çekirdeklerinde otomatik olarak birleştirilir. Yama zaten yukarı akış Linux'taysa, aşağıdaki yama gereksinimlerine uyan yamanın bir backport'unu yayınlayın.
  2. Daha az iyi: (bakış bir memba Linux noktadan) ağaçtan sizin yamaları geliştirin. Yamalar bir Android özgü hatayı düzeltmeye sürece, onlar ile koordine ettik sürece kabul edilmesi çok olası konum kernel-team@android.com .

GKI'yi uygulayan iş ortakları için, ağaç dışı yamaların gerekli olmasının geçerli nedenleri olabilir (özellikle karşılanması gereken silikon programları varsa). Bu gibi durumlar için, bir dosya Buganizer sorunu.

İçin Gerrit aracılığıyla GKI değişiklikleri Gönder android-mainline gerektiği gibi birinci ve daha sonra diğer serbest bırakma dallarına backported şube.

Yüklenebilir modüllerle ilişkili kaynak kodunun GKI çekirdek kaynak ağacına eklenmesi gerekmez, ancak tüm sürücülerin yukarı akış Linux'a gönderilmesi şiddetle önerilir.

Ana hattan backport talep etme

Genel olarak, GKI ortaklarının ihtiyaç duyduğu ana hat yamaları GKI çekirdeklerine geri aktarılabilir. Aşağıdaki Gerrit için yama yükleyin katkı yönergelerine .

Yama yukarıya gönderildiyse ancak henüz kabul edilmediyse, kabul edilene kadar beklemeniz önerilir. Program, yamanın yukarı yönde kabul edilmesini beklemeye izin vermiyorsa, bir Buganizer sorunu bildirin.

GKI yapılandırmalarını ekleme ve kaldırma

İçinde yapılandırmaları eklenmesini veya çıkarılmasını istemek için arch/arm64/configs/gki_defconfig , açıkça istek ve gerekçe belirten bir Buganizer sorunu dosyası. Erişilebilir bir Buganizer projesi yoksa, yapılandırma değişikliğiyle birlikte yamayı Gerrit'e gönderin ve taahhüt mesajının yapılandırmanın gerekli nedenini açıkça belirttiğinden emin olun.

Dondurulmuş KMI çekirdeklerindeki yapılandırma değişiklikleri KMI'yi etkilememelidir.

Çekirdek çekirdek kodunu değiştirme

AOSP ortak çekirdeklerinde çekirdek çekirdek kodunda değişiklik yapılması önerilmez. Önce yamaları yukarı akış Linux'a gönderin ve ardından onları destekleyin. Çekirdek çekirdek değişikliği için iyi bir neden varsa, isteği ve gerekçeyi açıkça belirten bir Buganizer sorunu bildirin. Buganizer sorunu olmadan Android'e özgü hiçbir özellik kabul edilmez. Bir e-posta gönder kernel-team@android.com Bir Buganizer sorunu yaratmaz eğer.

EXPORT_SYMBOL_GPL() yoluyla sembolleri dışa aktarma

Yalnızca sembol dışa aktarmalarını içeren yamaları yukarı yönde göndermeyin. Memba Linux için dikkate alınması için, ilaveleri EXPORT_SYMBOL_GPL() böylece ihracat aynı patchset varolan sürücüye yeni sürücü veya değişiklikleri içerir, sembol kullanan bir in-ağacının modüler sürücüsü gerektirir.

Yamaları yukarı akışa gönderirken, taahhüt mesajı, yamanın neden gerekli ve topluluk için faydalı olduğuna dair net bir gerekçe içermelidir. Ağaç dışı sürücülere veya işlevselliğe fayda sağlamak için dışa aktarmayı etkinleştirmek, yukarı akış bakımcıları için ikna edici bir argüman değildir.

Herhangi bir nedenle yama yukarı akışa gönderilemiyorsa, bir Buganizer sorunu bildirin ve yamanın neden yukarı akışa gönderilemediğini açıklayın. Genellikle, bir çekirdek alt sisteminin desteklenen arabirimi olan sembollerin dışa aktarma olarak kabul edilmesi olasıdır. Ancak, rastgele dahili yardımcı işlevlerin kabul edilmesi olası değildir ve bunları kullanmaktan kaçınmak için kodunuzu yeniden düzenlemeniz istenecektir.

KMI sembol listesine sembol ekleme

KMI sembol listeleri, satıcı modülleri tarafından kullanılan GKI çekirdek sembolleriyle güncellenmelidir. Yalnızca KMI simgeleri sabit tutulduğundan, GKI, modüllerin KMI olmayan bir simgeye bağlı olmaları durumunda yüklenmesine izin vermez.

extract_symbols komut çekirdek kurulumu ağacından ilgili semboller ayıklar ve bir KMI sembol listesini güncellemek için kullanılabilir. Bakınız sembol listeleme belgelerinde daha detaylı bilgi için.