Satıcı modülleri için istikrarlı bir KMI sağlamak çok önemlidir. GKI çekirdeği ikili biçimde oluşturulur ve gönderilir ve satıcı tarafından yüklenebilir modüller ayrı bir ağaçta oluşturulur. Ortaya çıkan GKI çekirdeği ve satıcı 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ına kaşlarını çattı . Farklı araç zincirleri, konfigürasyonlar ve sürekli gelişen bir Linux ana hat çekirdeği karşısında, ana hatta sabit bir KMI'yi sürdürmek mümkün değildir. Ancak, son derece kısıtlı GKI ortamında şu kısıtlamalarla istikrarlı bir KMI'yi 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
veyaandroid13-5.15
gibi bir çekirdeğin aynı LTS ve Android sürümü içinde kararlıdır.-
android-mainline
için KMI kararlılığı sağlanmaz.
-
Ç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 bir sembol listesinde belirtildiği gibi modüller tarafından kullanıldığı bilinen semboller, kararlılık ve dikkate alınan KMI sembolleri için izlenir.
- Bunun doğal sonucu, satıcı modüllerinin yalnızca KMI sembollerini kullanması gerektiğidir. Bu kısıtlama, KMI olmayan sembollerin gerekli olması halinde başarısız modül yükleri tarafından uygulanır.
KMI şubesi dondurulduktan sonra, değişikliklere izin verilir ancak KMI'yi bozamaz. Bu değişiklikler aşağıdakileri içerir:
- Yapılandırma değişiklikleri
- Çekirdek kodu değişiklikleri
- Araç zinciri değişiklikleri (güncellemeler dahil)
Hermetik oluşturma sürecini ve LLVM araç zincirini kullanın
Hermetik oluşturma süreci, kernel/manifest
repo
bildirimlerinin yapı ortamını tamamen tanımlamasını sağlayarak kararlı bir KMI sağlar. Örneğin, android13-5.15
bildirimi , 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 oluşturma işlemi kullanmak, aynı zamanda, Google tarafından oluşturulmuş (örneğin, abi_gki_aarch64.xml
için android13-5.15
veya satıcı modüllerini içeren yerel bir ağaçta oluşturulmuş olsun, ağaç için ABI açıklamasının tutarlı olmasını sağlar . Çekirdek Modül Arayüzü (KMI) için ABI açıklaması , bildirim tarafından açıklanan deponun bir parçası olarak da 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 bir LLVM araç zinciri ile oluşturulmalıdır. GKI ile, ürün çekirdekleri ve satıcı modülleri oluşturmak için kullanılan LLVM araç zinciri, AOSP'nin LLVM araç zinciri ile aynı ABI'yi oluşturmalı ve iş ortakları, KMI'nin GKI çekirdeği ile uyumlu olmasını sağlamalıdır. Uyumluluk garantileri sağladıkları için sağlanan oluşturma araçlarının kullanılması şiddetle tavsiye edilir.
Sıradaki ne?
Hermetik oluşturma sürecini ve LLVM araç zincirini kullanarak çekirdeği oluşturmaya ilişkin talimatlar için, Çekirdek oluşturma bölümüne bakın.
ABI'nin nasıl izleneceği ve sorunların nasıl çözüleceği ile ilgili talimatlar için Android Kernel ABI Monitoring'e bakın.