Çekirdek modülü arayüzünün kararlılığını koruma

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şturulur ve gönderilir. Tedarikçi firma tarafından yüklenebilecek modüller ise ayrı bir ağaçta oluşturulur. Ortaya çıkan 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ığı fikrine karşı çıkmıştır. Farklı araç zincirleri, yapılandırmalar ve sürekli gelişen bir Linux ana hat çekirdeği karşısında, ana hatta kararlı bir KMI sürdürmek mümkün değildir. Ancak aşağıdaki sınırlamalarla, son derece kısıtlı GKI ortamında istikrarlı bir KMI elde etmek mümkündür:

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

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

    • android-mainline için KMI kararlılığı sağlanamıyor.
  • Çekirdek ve modülleri derlemek için yalnızca AOSP'de sağlanan ve karşılık gelen dal için tanımlanan belirli Clang araç zinciri kullanılır.

  • Yalnızca bir simge listesinde belirtildiği şekilde modüller tarafından kullanıldığı bilinen simgeler kararlılık açısından izlenir ve KMI simgesi olarak kabul edilir.

    • Bu nedenle, tedarikçi modüllerinde yalnızca KMI sembolleri kullanılmalıdır. Bu kısıtlama, KMI simgesi olmayan simgeler gerekli olduğunda başarısız modül yüklemeleriyle uygulanır.
  • KMI şubesi dondurulduktan sonra değişikliklere izin verilir ancak 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, kernel/manifest içindeki repo manifestlerinin derleme ortamını tamamen tanımlamasını sağlayarak kararlı 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 her şeyi içerir. GKI derleme yapılandırması build.config.gki.aarch64 gibi ilgili build.config yapılandırma dosyaları, tutarlı derleme sonuçları elde etmek 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. android13-5.15 için abi_gki_aarch64.xml) oluşturulup oluşturulmadığına bakılmaksızın tutarlı olmasını sağlar veya tedarikçi modüllerini içeren yerel bir ağaçta oluşturulur. Manifest tarafından açıklanan deponun bir parçası olarak, çekirdek modülü arayüzü (KMI) için ABI açıklamasını oluşturmak ve karşılaştırmak üzere kullanılan araçlar da 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 derlenmelidir. GKI ile ürün çekirdeklerini ve tedarikçi 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 olduğundan emin olmalı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 işlemini ve LLVM araç zincirini kullanarak çekirdeği oluşturma talimatları için Çekirdek oluşturma bölümüne bakın.

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