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 derlenip gönderilir ve tedarikçi firma tarafından yüklenebilecek modüller 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 kısıtlamalarla birlikte yüksek düzeyde kısıtlanmış GKI ortamında kararlı bir KMI elde etmek mümkündür:
Çekirdek 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.
android13-5.10
,android12-5.10
veyaandroid13-5.15
) kararlıdır.android-mainline
için KMI kararlılığı sağlanmıyor.
Çekirdek ve modülleri derlemek için yalnızca AOSP'de sağlanan ve ilgili 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.
- Sonuç olarak, tedarikçi modüllerinde yalnızca KMI sembolleri kullanılmalıdır. KMI dışındaki semboller gerekiyorsa bu kısıtlama, modül yüklemelerinin başarısız olmasıyla uygulanır.
KMI şubesi dondurulduktan sonra değişikliklere izin verilir ancak KMI'yı bozamaz. Bu değişiklikler şunlardır:
- 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ç setini kullanarak çekirdeği derlemeyle ilgili talimatlar için Çekirdek derleme başlıklı makaleyi inceleyin.
ABI'yi izleme ve sorunları düzeltme talimatları için Android Çekirdek ABI İzleme başlıklı makaleyi inceleyin.