Bu bölümde Android çekirdeği ABI temsillerinin nasıl oluşturulacağı ve ABI izlemenin nasıl çalıştırılacağı açıklanmaktadır. Android 14 ve üzeri için geçerlidir. Daha eski sürümler için lütfen Eski çekirdek sürümlerine bakın.
Ayrıca Kleaf için referans belgelerine bakın: Destek ABI izleme (GKI) ve Destek ABI izleme (Cihaz) .
Çekirdeği ve onun ABI temsilini oluşturun
GKI kaynaklarını indirdikten sonra GKI çekirdeğini ve ABI yapıtlarını oluşturmak için aşağıdaki komutu çalıştırın:
tools/bazel run //common:kernel_aarch64_abi_dist
Bu komut mevcut ABI gösterimini oluşturur ve bunu yerleşik çekirdek ve modüllerle birlikte out_abi/kernel_aarch64/dist/abi.stg
kopyalar.
--
komutundan sonra komutun sonunda ABI araçları için ekstra argümanlar belirleyebilirsiniz. Örneğin, ABI'nin hedefini değiştirmek ve yapıtlar oluşturmak için --dist_dir
seçeneğini kullanabilirsiniz:
tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist
Derleme ile referans gösterimi arasındaki ABI farklılıklarını analiz edin
Yukarıdaki komutta yürütülen //common:kernel_aarch64_abi_dist
hedefi, common/android/abi_gki_aarch64.stg
( BUILD.bazel'de tanımlanmış) konumunda bulunan yapı ve referans gösterimi arasında bulunan tüm ABI farklılıklarını analiz eder ve bildirir. Bu farklar, aşağıdaki örnekte gösterildiği gibi, derlemenin sonunda yazdırılacaktır:
INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!
Basılı rapor, diğer formatlardaki raporlarla birlikte out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short
adresinde bulunan yapı yapısından gelir.
Otomasyon, farklılıklar bulunursa sıfır olmayacak olan build komutunun çıkış kodunu kullanmalıdır.
android-mainline
da dahil olmak üzere geliştirme aşaması dallarının referans ABI temsiline sahip olmadığını lütfen unutmayın. Bu olmadan, //common:kernel_aarch64_abi_dist
herhangi bir fark tespit etmeyecektir.
Referans ABI gösterimini güncelleyin
Sembol listesi güncellemesi gibi ABI çekirdeğini etkileyen herhangi bir değişikliğin, referans ABI temsiline ( common/android/abi_gki_aarch64.stg
, BUILD.bazel'de tanımlanan) yansıtılması gerekir. Bunu yapmak için aşağıdaki komutu çalıştırmanız gerekir:
tools/bazel run //common:kernel_aarch64_abi_update
Bu komut, ABI farklılıklarını analiz etme adımındaki her şeyi gerçekleştirir ve ayrıca kaynaklardaki referans gösterimini günceller. Güncellenen ABI daha sonra değişiklikle aynı taahhütte yüklenebilir. Lütfen rapordaki ABI farklılıklarını $DIST_DIR/abi.report.short
dosyasına taahhüt mesajına ekleyin.
ABI izleme ve cihaz hedefleri
ABI izlemenin yalnızca çekirdek çekirdek oluşturma hedefleri için yapılandırılması gerekir. Doğrudan GKI çekirdeğiyle derlenen karma yapı yapılandırmalarının ( base_kernel
tanımlayanlar) yalnızca aygıt simge listesini izlemeye yönelik destek eklemesi gerekir . ABI tanımı GKI yapısı kullanılarak güncellenmelidir .
Ayrıca Kleaf için referans belgelere bakın: ABI izleme desteği (Cihaz) .
Eski çekirdek sürümleri
Android 13
Derleme talimatları, ABI formatının XML olması ve referans ABI gösteriminin common/android/abi_gki_aarch64.xml
olması dışında çoğunlukla Android 14 ile aynıdır.
Android 12 ve altı
Android 13'te olduğu gibi ABI formatı XML'dir.
Daha eski çekirdekler Kleaf yerine build.sh
kullanır. ABI izleme için, yapıyı build.sh
ile özelleştirmek için aynı ortam değişkenlerini kabul eden build_abi.sh
kullanmalısınız. Örneğin:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
Bu, çekirdeği oluşturur ve ABI temsilini OUT_DIR
(varsayılan olarak out_abi
) alt dizinine çıkarır ve Kleaf'in //common:kernel_aarch64_abi_dist
hedefine eşdeğerdir (bkz . Çekirdek oluşturma ve ABI yapıtları ).
Referans ABI temsili, common/build.config.gki.aarch64
dosyasındaki ABI_DEFINITION
değişkeni tarafından tanımlandığı gibi android/abi_gki_aarch64.xml
dosyasında saklanır.
Çekirdek ABI gösterimini güncellemeniz gerekiyorsa en uygun yol --update
ve --print-report
seçeneklerini kullanmaktır:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report
--print-report
mevcut dosya ile yeni oluşturulan bir ABI arasındaki ABI farklarını yazdırır.
--update
seçeneği referans ABI gösteriminin üzerine yazar. Ayrıca KMI_SYMBOL_LIST
yapılandırılmış bir cihaz için BUILD_CONFIG
kullanıldığında sembol listesi güncellemesini de yapar.