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 kritik öneme sahiptir. 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 sürdürmek 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.

    • Bunun sonucu olarak, satıcı 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'yı 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 işlemi kullanmak, ağacın ABI açıklamasının Google tarafından (örneğin, 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. Çekirdek Modülü Arayüzü (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, satıcı 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ı da 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?

  • Çekirdeği hermetik derleme işlemi ve LLVM araç zinciri kullanarak 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.