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 olabilir. 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,
sembol 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 eklemesi 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 geliştirebilirsiniz. Ö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.