ABI izlemeyi çalıştırma

Bu sayfada, Android çekirdek ABI temsillerinin nasıl oluşturulacağı ve ABI izlemenin nasıl çalıştırılacağı açıklanmaktadır. 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.

Kleaf ile ilgili referans dokümanlarına da 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 derlenmiş çekirdek ve modüllerle birlikte out_abi/kernel_aarch64/dist/abi.stg dosyasına kopyalar.

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

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 çalıştırılan //common:kernel_aarch64_abi_dist hedefi, derleme ile common/android/abi_gki_aarch64.stg adresindeki referans temsili arasında bulunan tüm ABI farklılıklarını analiz edip raporlar (BUILD.bazel içinde tanımlanır). Bu farklılıklar, aşağıdaki örnekte gösterildiği gibi derlemenin sonunda yazdırılır:

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

Basılı rapor, diğer biçimlerdeki raporlarla birlikte out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short adresindeki derleme yapısını temel alır.

Otomasyon, derleme komutunun çıkış kodunu kullanmalıdır. Bu kod, farklılık bulunursa sıfırdan farklıdır.

android-mainline dahil olmak üzere geliştirme aşaması dallarının referans ABI temsili olmadığını unutmayın. Aksi takdirde //common:kernel_aarch64_abi_dist herhangi bir fark algılamaz.

Referans ABI temsilini güncelleme

Çekirdek ABI'sini etkileyen tüm değişikliklerin (ör. sembol listesi güncellemesi) referans ABI temsiline (BUILD.bazel dosyasında tanımlanan common/android/abi_gki_aarch64.stg) yansıtılması gerekir. Bunun 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 aynı kaydı tutmaları gerekir. $DIST_DIR/abi.report.short adresindeki rapordaki ABI farklılıklarını commit mesajına ekleyin.

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.

Kleaf ile ilgili referans dokümanlarına da bakın: ABI izlemeyi destekleme (cihaz).

Eski çekirdek sürümleri

Android 13

Derleme talimatları çoğunlukla ABI biçiminin XML olması ve referans ABI temsili common/android/abi_gki_aarch64.xml.

Android 13 ve önceki sürümler

Android 13'te olduğu gibi, ABI biçimi 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 oluşturur ve ABI temsilini OUT_DIR (varsayılan olarak out_abi) alt dizinine ayıklayarak Kleaf'in //common:kernel_aarch64_abi_dist hedefine eşdeğer olur (Çekirdek ve ABI yapılarını oluşturma bölümüne bakın).

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, mevcut dosya ile yeni oluşturulan ABI arasındaki ABI farklılıklarını yazdırır.

--update seçeneği, referans ABI temsilinin ü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.