Kararlı bir Çekirdek Modül Arayüzünü (KMI) koruyun

Satıcı modülleri için istikrarlı bir KMI sağlamak kritik öneme sahiptir. GKI çekirdeği ikili biçimde oluşturulup gönderilir ve satıcı tarafından yüklenebilen modüller ayrı bir ağaçta oluşturulur. Ortaya çıkan GKI çekirdeği ve satıcı modülleri sanki birlikte oluşturulmuş gibi çalışmalıdır.

Genel olarak Linux topluluğu, ana hat çekirdeği için çekirdek içi ABI kararlılığı kavramına kaşlarını çattı . Farklı araç zincirleri, konfigürasyonlar ve sürekli gelişen Linux ana hat çekirdeği karşısında, ana hatta istikrarlı bir KMI sağlamak mümkün değildir. Ancak yüksek düzeyde kısıtlanmış GKI ortamında aşağıdaki kısıtlamalarla istikrarlı bir KMI'yı sürdürmek mümkündür:

  • Çekirdeği oluşturmak için yalnızca tek bir yapılandırma olan gki_defconfig kullanılabilir.

  • KMI yalnızca android13-5.10 , android12-5.10 veya android13-5.15 gibi bir çekirdeğin aynı LTS ve Android sürümünde kararlıdır.

    • android-mainline için KMI kararlılığı korunmaz.
  • Çekirdek ve modülleri oluşturmak için yalnızca AOSP'de sağlanan ve ilgili dal için tanımlanan belirli Clang araç zinciri kullanılır.

  • Yalnızca sembol listesinde belirtildiği gibi modüller tarafından kullanıldığı bilinen semboller kararlılık açısından izlenir ve KMI sembolleri olarak kabul edilir.

    • Bunun doğal sonucu, satıcı modüllerinin yalnızca KMI sembollerini kullanması gerektiğidir. Bu kısıtlama, KMI dışı sembollerin gerekli olması durumunda başarısız modül yüklemeleri tarafından uygulanır.
  • KMI şubesi dondurulduktan sonra değişikliklere izin verilir ancak KMI kırılamaz. Bu değişiklikler aşağıdakileri içerir:

    • Yapılandırma değişiklikleri
    • Çekirdek kodu değişiklikleri
    • Takım zinciri değişiklikleri (güncellemeler dahil)

Hermetik derleme sürecini ve LLVM araç zincirini kullanın

Hermetik derleme süreci, kernel/manifest repo bildirimlerinin yapı ortamını tamamen tanımlamasını sağlayarak istikrarlı bir KMI sağlar. Örneğin, android13-5.15 için manifest , araç zincirini, derleme komut dosyalarını ve Genel Çekirdek Görüntüsü (GKI) çekirdeğini oluşturmak için gereken diğer her şeyi içerir. GKI build config build.config.gki.aarch64 gibi ilgili build.config yapılandırma dosyaları, tutarlı derleme sonuçları oluşturmak için dahil edilen araçların doğru şekilde kullanılmasını sağlar.

Hermetik bir oluşturma sürecinin kullanılması, ağaca ilişkin ABI açıklamasının, ister Google tarafından oluşturulmuş olsun (örneğin, android13-5.15 için abi_gki_aarch64.xml ), ister satıcı modüllerini içeren yerel bir ağaçta oluşturulmuş olsun tutarlı olmasını sağlar . Çekirdek Modül Arayüzü (KMI) için ABI açıklaması da manifest tarafından açıklanan reponun bir parçası olarak sağlanmaktadır.

GKI çekirdeğini oluşturmak için kullanılan araç zincirinin, satıcı modülleri oluşturmak için kullanılan araç zinciriyle tamamen uyumlu olması gerekir. Android 10'dan itibaren tüm Android çekirdeklerinin bir LLVM araç zinciriyle oluşturulması gerekmektedir. GKI ile, ürün çekirdekleri ve satıcı modülleri oluşturmak için kullanılan LLVM araç zincirinin, AOSP'nin LLVM araç zinciriyle aynı ABI'yi oluşturması gerekir ve iş ortakları, KMI'nın GKI çekirdeğiyle uyumlu olduğundan emin olmalıdır. Uyumluluk garantileri sağladıkları için sağlanan derleme araçlarının kullanılması şiddetle tavsiye edilir.

Sıradaki ne?

  • Hermetik derleme sürecini ve LLVM araç zincirini kullanarak çekirdeği oluşturmaya ilişkin talimatlar için Derleme çekirdekleri bölümüne bakın.

  • ABI'nin nasıl izleneceğine ve sorunların nasıl çözüleceğine ilişkin talimatlar için Android Kernel ABI Monitoring'e bakın.