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.