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. 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, simge 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 eklenmesi 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 derleyebilirsiniz. Ö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.