Bu sayfada, Android çekirdek ABI temsillerinin nasıl oluşturulacağı ve ABI izlemenin nasıl çalıştırılacağı açıklanmaktadır. Android 16 ve sonraki sürümler için geçerlidir. Daha eski sürümler için ABI, önceki çekirdek sürümlerini izler başlıklı makaleyi inceleyin.
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 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 temsilini oluşturur ve derlenmiş çekirdek ve modüllerle birlikte $DIST_DIR/abi.stg
dosyasına kopyalar. $DIST_DIR
varsayılan olarak out_abi/kernel_aarch64_abi_dist/dist
değerine ayarlanır.
ABI araçları için ek bağımsız değişkenleri, komutun sonundaki --
işaretinden sonra 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
Önceki komutta yürütülen //common:kernel_aarch64_abi_dist
hedefi, derleme ile common/gki/aarch64/abi.stg
adresindeki referans temsili (BUILD.bazel
içinde tanımlanır) 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!
Basılı rapor, diğer biçimlerdeki raporlarla birlikte $DIST_DIR/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. simge listesi güncellemesi) referans ABI temsiline (BUILD.bazel dosyasında tanımlanan common/gki/aarch64/abi.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, değişiklikle aynı taahhütte yüklenebilir. $DIST_DIR/abi_stgdiff/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).
ABI, önceki çekirdek sürümlerini izler (Android 15 ve önceki sürümler)
Önceki çekirdek sürümlerinde ABI derleme ve izleme talimatları aşağıdaki gibi farklılık gösterir.
Android 15 ve 14
Talimatlar, referans ABI temsilinin common/android/abi_gki_aarch64.stg
olması ve $DIST_DIR
'ın 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 derlenebilir.
Kleaf için talimatlar, ABI biçiminin XML olması ve referans ABI temsilinin 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 common/android/abi_gki_aarch64.xml
şeklindedir.
Bu çekirdekler Kleaf yerine build.sh
kullanır. ABI izleme için build_abi.sh
kullanmanız gerekir. Bu araç, 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 temsilini OUT_DIR
(varsayılan olarak out_abi
) alt dizinine ayıklayarak Kleaf'ın //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, 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.