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 eski sürümler için Daha eski çekirdek sürümleri başlıklı makaleyi inceleyin.

Ayrıca Kleaf referans belgelerine de göz atın: ABI izlemeyi destekleme (GKI) ve ABI izleme desteği (Cihaz).

Çekirdeği ve ABI temsilini oluşturma

GKI kaynaklarını indirdikten sonra GKI çekirdeğini 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 gösterimini oluşturur ve bunu, oluşturulan çekirdek ve modüllerle birlikte out_abi/kernel_aarch64/dist/abi.stg konumuna kopyalar.

ABI araçları için -- ifadesinden sonra gelen komutun sonunda ek bağımsız değişkenler belirtebilirsiniz. Ö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 ile referans gösterim arasındaki ABI farklılıkları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

Sembol listesi güncellemesi gibi çekirdek ABI'yı etkileyen değişikliklerin referans ABI temsiline (BUILD.bazel'de tanımlanan common/android/abi_gki_aarch64.stg) yansıtılması gerekir. 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, ABI farklılıklarını analiz etme adımında tüm işlemleri gerçekleştirir ve ek olarak kaynaklardaki referans gösterimini günceller. Güncellenen ABI, değişiklikle aynı commit'e yüklenebilir. $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 çekirdek çekirdek derleme hedefleri için yapılandırılması gerekir. Doğrudan GKI çekirdeğiyle derlenen karma derleme yapılandırmalarının (base_kernel'ü tanımlayan yapılandırmalar) yalnızca cihaz simge listesini izleme desteğini eklemesi gerekir. 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ı, ABI biçiminin XML olması ve referans ABI temsilinin common/android/abi_gki_aarch64.xml olması dışında Android 14 ile büyük ölçüde aynıdır.

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ır. ABI izleme için build_abi.sh kullanmanız gerekir. Bu, derlemeyi özelleştirmek için build.sh ile aynı ortam değişkenlerini kabul eder. Örnek:

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

Bu işlem çekirdeği oluşturur ve ABI gösterimini OUT_DIR (varsayılan olarak out_abi şeklindedir) alt dizinine çıkarır ve Kleaf'in //common:kernel_aarch64_abi_dist hedefine eşdeğerdir (Çekirdek ve ABI yapıları derleme bölümüne bakın).

Referans ABI temsili, common/build.config.gki.aarch64 içindeki ABI_DEFINITION değişkeni tarafından tanımlandığı şekilde android/abi_gki_aarch64.xml içinde saklanır.

Çekirdek ABI temsilini güncellemeniz gerekiyorsa en uygun yöntem --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 ABI arasındaki ABI farklılıklarını yazdırır.

--update seçeneği, referans ABI temsilinin üzerine yazar. Ayrıca, KMI_SYMBOL_LIST yapılandırılmış bir cihaz için BUILD_CONFIG kullanıldığında simge listesi güncellemesini de yapar.