Kararlı bir çekirdek modülü arayüzü sürdürme

Tedarikçi modülleri için kararlı bir çekirdek modülü arayüzü (KMI) sürdürmek çok önemlidir. GKI çekirdeği ikili biçimde oluşturulup gönderilir ve tedarikçi tarafından yüklenebilen modüller ayrı bir ağaçta oluşturulur. Elde edilen GKI çekirdeği ve tedarikçi modülleri, 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ını onaylamamıştır. Farklı araç zincirleri, yapılandırmalar ve sürekli gelişen Linux ana hat çekirdeği karşısında, ana hatta kararlı bir KMI'yi korumak mümkün değildir. Ancak, aşağıdaki kısıtlamalarla birlikte oldukça kısıtlı GKI ortamında kararlı bir KMI'nin korunması mümkündür:

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

  • KMI yalnızca bir çekirdeğin aynı LTS ve Android sürümünde (ör. android14-6.1, android15-6.6 veya android16-6.12) kararlıdır.

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

  • Yalnızca bir sembol listesinde belirtildiği şekilde modüller tarafından kullanıldığı bilinen sembollerin kararlılığı izlenir ve bu semboller KMI sembolü olarak kabul edilir.

    • Bununla birlikte, tedarikçi modülleri yalnızca KMI sembollerini kullanmalıdır. Bu kısıtlama, KMI olmayan semboller gerektiğinde modül yüklemeleri başarısız olarak uygulanır.
  • KMI dalı dondurulduktan sonra değişikliklere izin verilir ancak bu değişiklikler KMI'yi bozamaz. Bu değişiklikler şunları içerir:

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

Hermetik derleme sürecini ve LLVM araç zincirini kullanma

Hermetik derleme süreci, repo manifestlerinin kernel/manifest derleme ortamını tamamen tanımlamasını sağlayarak kararlı bir KMI sağlar. Örneğin, android16-6.12 için manifest; araç zincirini, derleme sistemini ve Genel Çekirdek Görüntüsü (GKI) çekirdeğini oluşturmak için gereken diğer her şeyi içerir. Öncelikle BUILD.bazel olmak üzere derleme yapılandırması, tutarlı derleme sonuçları oluşturmak için dahil edilen araçların doğru şekilde kullanılmasını sağlar.

Hermetik bir derleme süreci kullanmak, ağacın ABI açıklamasının Google tarafından (ör. android16-6.12 için gki/aarch64/abi.stg) veya tedarikçi modüllerini içeren yerel bir ağaçta oluşturulup oluşturulmadığına bakılmaksızın tutarlı olmasını da sağlar. Kernel Module Interface (KMI) için ABI açıklamasını oluşturma ve karşılaştırma araçları da manifest tarafından açıklanan depo kapsamında sağlanır.

GKI çekirdeğini oluşturmak için kullanılan araç zinciri, tedarikçi modüllerini oluşturmak için kullanılan araç zinciriyle tamamen uyumlu olmalıdır. Android 10'dan itibaren tüm Android çekirdekleri LLVM araç zinciriyle oluşturulmalıdır. GKI ile ürün çekirdeklerini ve satıcı modüllerini oluşturmak için kullanılan LLVM araç zinciri, AOSP'deki LLVM araç zinciriyle aynı ABI'yi oluşturmalıdır. İş ortakları, KMI'nin GKI çekirdeğiyle uyumlu olmasını sağlamalıdır. En iyi uyumluluğu sağladıkları için sağlanan derleme araçlarının kullanılması önemle tavsiye edilir.

Sırada ne var?

  • Hermetik derleme sürecini ve LLVM araç zincirini kullanarak çekirdek oluşturma talimatları için Çekirdek oluşturma başlıklı makaleye bakın.

  • ABI'yi izleme ve sorunları düzeltme talimatları için Android Kernel ABI İzleme başlıklı makaleyi inceleyin.