ABI izlemeyi çalıştırma

Bu sayfada, Android çekirdeği ABI temsillerinin nasıl oluşturulacağı ve çalıştırılacağı ABI izleme. Android 14 ve sonraki sürümler için geçerlidir daha yüksek olabilir. Daha düşük sürümler için şuraya bakın: Eski çekirdek sürümleri.

Ayrıca Kleaf'in referans belgelerine de göz atın: ABI izlemeyi destekleme (GKI) ve ABI izlemeyi destekleme (Cihaz).

Çekirdek ve ABI temsilini oluşturma

GKI kaynaklarını indirdikten sonra GKI çekirdeği ve ABI yapılarını derlemek için aşağıdaki komutu çalıştırın:

tools/bazel run //common:kernel_aarch64_abi_dist

Bu komut, mevcut ABI temsilini oluşturur ve bunu Derlenmiş çekirdek ve modüllerle birlikte out_abi/kernel_aarch64/dist/abi.stg.

Komutun sonunda ABI aracı için ek bağımsız değişkenler belirtebilirsiniz -- tarihinden sonra. Örneğin, ABI'nın hedefini değiştirmek ve yapılar derlemek için --dist_dir seçeneğini kullanabilir:

tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist

Derleme ve referans gösterimi arasındaki ABI farklarını analiz etme

Yukarıdaki komutta yürütülen //common:kernel_aarch64_abi_dist hedefi, Derleme ve referans arasında bulunan ABI farklılıklarını analiz edip bildirir common/android/abi_gki_aarch64.stg konumunda bulunan temsili ( BUILD.bazel) seçin. Bu farklılıklar, şu örneği inceleyin:

INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!

Yazdırılan rapor, şu adreste bulunan derleme yapısından gelir: out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short ve raporlarla birlikte kullanabilirsiniz.

Otomasyon, derleme komutunun çıkış kodunu kullanmalıdır. Bu kod, farklar bulunur.

Lütfen geliştirme aşaması android-mainline dahil olmak üzere dalların referans ABI temsili yoktur. Bu olmadan //common:kernel_aarch64_abi_dist herhangi bir farklılık algılamaz.

Referans ABI temsilini güncelleme

Çekirdek ABI'sini etkileyen herhangi bir değişiklik, sembol listesi güncellemesi, referans ABI temsiline yansıtılması gerekir (common/android/abi_gki_aarch64.stg, şurada tanımlandı: BUILD.bazel) gelir. Bu işlemi gerçekleştirmek için şu komutu çalıştırmanız gerekir:

​​tools/bazel run //common:kernel_aarch64_abi_update

Bu komut, bu adımdaki tüm işlemleri gerçekleştirir ABI farklılıklarını analiz eder ve kaynaklardaki referans temsili. Güncellenen ABI, daha sonra aynı kaydı tutmaları gerekir. ile kayıt mesajındaki $DIST_DIR/abi.report.short dosyasında.

ABI izleme ve cihaz hedefleri

ABI izlemenin yalnızca temel çekirdek derleme hedefleri için yapılandırılması gerekir. Karma ile doğrudan derlenen yapılandırmalar (base_kernel öğesini tanımlayanlar) GKI çekirdeğine yalnızca cihaz sembolünü izleme desteği eklemesi gerekir) liste'yi tıklayın. ABI tanımı, GKI derlemesi kullanılarak güncellenmelidir.

Ayrıca Kleaf referans belgelerine de göz atın: ABI izlemeyi destekleme (Cihaz).

Eski çekirdek sürümleri

Android 13

Derleme talimatları genel olarak ABI biçiminin XML olması ve referans ABI temsili common/android/abi_gki_aarch64.xml.

Android 13 ve önceki sürümler

ABI biçimi, Android 13'te olduğu gibi XML'dir.

Eski çekirdekler Kleaf yerine build.sh kullanıyor. ABI izleme için build_abi.sh, build.sh olarak geliştirebilirsiniz. Örnek:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh

Bu işlem, çekirdeği derler ve ABI gösterimini OUT_DIR öğesine çıkarır (varsayılan olarak out_abi) alt dizinidir ve Kleaf'ın //common:kernel_aarch64_abi_dist hedefi (bkz. Çekirdek ve ABI yapıları derleyin).

Referans ABI temsili android/abi_gki_aarch64.xml içinde şu şekilde depolanır: common/build.config.gki.aarch64 içindeki ABI_DEFINITION değişkeniyle tanımlanır.

Çekirdek ABI gösterimini güncellemeniz gerekiyorsa en uygun yol --update ve --print-report seçeneklerini kullanmak için:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report

--print-report, dosya arasındaki ABI farklarını mevcut haliyle yazdırır ve yeni oluşturulan bir ABI.

--update seçeneği, referans ABI gösteriminin üzerine yazar. Ayrıca "the" simge listesi güncellemesi KMI_SYMBOL_LIST yapılandırılmış bir cihaz için BUILD_CONFIG kullanılırken.