Bu sayfada, Android çekirdeği ABI temsillerinin nasıl oluşturulacağı ve ABI izlemenin nasıl çalıştırılacağı açıklanmaktadır. Android 16 ve sonraki sürümlerde kullanılabilir. Daha eski sürümler için ABI monitor previous kernel versions (ABI, önceki çekirdek sürümlerini izler) başlıklı makaleyi inceleyin.
Ayrıca Kleaf ile ilgili referans dokümanlarına da göz atın: ABI izlemeyi destekleme (GKI) ve ABI izlemeyi destekleme (Cihaz).
Çekirdeği ve ABI gösterimini oluşturun
GKI kaynaklarını indirdikten sonra GKI çekirdeğini ve ABI yapıları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 oluşturulan çekirdek ve modüllerle birlikte $DIST_DIR/abi.stg
konumuna kopyalar. $DIST_DIR
varsayılan olarak out_abi/kernel_aarch64_abi_dist/dist
değerine ayarlanır.
Komutun sonuna, --
işaretinden sonra ABI araçları için ek bağımsız değişkenler belirtebilirsiniz. Örneğin, ABI ve derleme yapıları için hedefi değiştirmek istiyorsanız --destdir
seçeneğini kullanabilirsiniz:
tools/bazel run //common:kernel_aarch64_abi_dist -- --destdir=out/dist
Derleme ile referans gösterimi arasındaki ABI farklılıklarını analiz etme
Önceki komutta yürütülen //common:kernel_aarch64_abi_dist
hedefi, common/gki/aarch64/abi.stg
konumunda bulunan (BUILD.bazel
içinde tanımlanır) derleme ve referans gösterimi arasında bulunan tüm ABI farklılıklarını analiz edip raporlar. 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!
Yazdırılan rapor, $DIST_DIR/abi_stgdiff/abi.report.short
konumundaki derleme yapıtından ve diğer biçimlerdeki raporlardan alınır.
Otomasyon, farklılıklar bulunursa sıfır olmayan derleme komutunun çıkış kodunu kullanmalıdır.
android-mainline
dahil olmak üzere geliştirme aşaması dallarının referans ABI gösterimi olmadığını unutmayın.
Bu olmadan //common:kernel_aarch64_abi_dist
herhangi bir fark algılamaz.
Referans ABI gösterimini güncelleme
Çekirdek ABI'sini etkileyen tüm değişikliklerin (ör. sembol listesi güncellemesi) referans ABI gösterimine (common/gki/aarch64/abi.stg
, BUILD.bazel içinde tanımlanır) 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 yapar ve kaynaklardaki referans gösterimini de günceller. Güncellenen ABI, değişiklikle aynı commit işleminde yüklenebilir. $DIST_DIR/abi_stgdiff/abi.report.short
raporundaki ABI farklılıklarını taahhüt mesajına ekleyin.
ABI izleme ve cihaz hedefleri
ABI izleme yalnızca temel çekirdek derleme hedefleri için yapılandırılmalıdır. Doğrudan GKI çekirdeğiyle derlenen karma derleme yapılandırmalarının (base_kernel
tanımlayanlar) yalnızca cihaz sembol listesinin izlenmesi için destek eklemesi gerekir.
ABI tanımı, GKI derlemesi kullanılarak güncellenmelidir.
Ayrıca Kleaf ile ilgili referans belgelerine de göz atın: ABI izlemeyi destekleme (Cihaz).
ABI, önceki çekirdek sürümlerini (Android 15 ve önceki sürümler) izler.
Önceki çekirdek sürümlerinde ABI oluşturma ve izleme talimatları aşağıdaki gibi farklılık gösterir.
Android 15 ve 14
Talimatlar, referans ABI gösteriminin common/android/abi_gki_aarch64.stg
ve $DIST_DIR
varsayılan olarak out_abi/kernel_aarch64/dist
olması dışında Android 16 ile büyük ölçüde aynıdır.
Android 13
Android 13, Kleaf veya eski derleme komut dosyalarıyla oluşturulabilir.
Kleaf için talimatlar, ABI biçiminin XML olması ve referans ABI gösteriminin common/android/abi_gki_aarch64.xml
olması dışında Android 14 ile aynıdır.
Eski derleme komut dosyaları için talimatlar Android 12 ile aynıdır.
Android 12 ve önceki sürümler
ABI biçimi XML'dir ve referans ABI gösterimi şöyledir:
common/android/abi_gki_aarch64.xml
Bu çekirdekler, Kleaf yerine build.sh
kullanır. ABI izleme için build_abi.sh
kullanmanız gerekir. Bu araç, build.sh
ile aynı ortam değişkenlerini kabul ederek derlemeyi özelleştirir. Örneğin:
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
) alt dizinine çıkarır. Bu işlem, Kleaf'in //common:kernel_aarch64_abi_dist
hedefiyle eşdeğerdir (bkz. Çekirdek ve ABI yapılarını oluşturma).
Referans ABI gösterimi, android/abi_gki_aarch64.xml
içinde common/build.config.gki.aarch64
'deki ABI_DEFINITION
değişkeni tarafından tanımlandığı şekilde depolanır.
Çekirdek ABI gösterimini 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
, dosyanın mevcut hali ile yeni oluşturulan bir ABI arasındaki ABI farklılıklarını yazdırır.
--update
seçeneği, referans ABI gösteriminin üzerine yazar. Ayrıca, KMI_SYMBOL_LIST
yapılandırılmış bir cihazda BUILD_CONFIG
kullanılırken sembol listesi güncellemesini de yapar.