ABI İzleme nasıl çalıştırılır

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.