Halaman ini menjelaskan cara membangun representasi ABI kernel Android dan menjalankan Pemantauan ABI. Kebijakan ini berlaku untuk Android 14 dan lebih tinggi. Untuk versi yang lebih rendah, lihat Versi kernel yang lebih lama.
Lihat juga dokumentasi referensi untuk Kleaf: Mendukung pemantauan ABI (GKI) dan Mendukung pemantauan ABI (Perangkat).
Membangun kernel dan representasi ABI-nya
Setelah mendownload sumber GKI jalankan perintah berikut untuk membuat kernel GKI dan artefak ABI:
tools/bazel run //common:kernel_aarch64_abi_dist
Perintah ini membangun representasi ABI saat ini dan menyalinnya ke
out_abi/kernel_aarch64/dist/abi.stg
beserta kernel dan modul yang dibangun.
Anda dapat menentukan argumen tambahan untuk alat ABI di akhir perintah
setelah --
. Misalnya untuk mengubah tujuan ABI dan artefak build, Anda
dapat menggunakan opsi --dist_dir
:
tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist
Menganalisis perbedaan ABI antara build dan representasi referensi
Target //common:kernel_aarch64_abi_dist
, yang dieksekusi dalam perintah di atas,
menganalisis dan melaporkan setiap perbedaan ABI yang ditemukan antara build dan referensi
yang terletak di common/android/abi_gki_aarch64.stg
(ditentukan dalam
BUILD.bazel
)
Perbedaan ini dicetak di akhir build, seperti yang ditunjukkan pada
contoh berikut:
INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!
Laporan yang dicetak berasal dari artefak build yang terletak di
out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short
bersama dengan laporan di
format lain.
Otomatisasi harus menggunakan kode keluar perintah build, yang bukan nol jika ditemukan perbedaan.
Perlu diketahui bahwa
fase pengembangan
cabang, termasuk android-mainline
, tidak memiliki representasi ABI referensi.
Tanpanya, //common:kernel_aarch64_abi_dist
tidak akan mendeteksi perbedaan apa pun.
Mengupdate representasi ABI referensi
Setiap perubahan yang memengaruhi ABI kernel, seperti
pembaruan daftar simbol,
harus tercermin dalam representasi ABI referensi
(common/android/abi_gki_aarch64.stg
, ditentukan di
BUILD.bazel).
Untuk melakukannya, Anda harus menjalankan perintah berikut:
tools/bazel run //common:kernel_aarch64_abi_update
Perintah ini melakukan semua langkah
Menganalisis perbedaan ABI dan juga mengupdate
representasi referensi dalam sumber. ABI yang telah diupdate selanjutnya dapat diupload di
commit yang sama dengan perubahan tersebut. Sertakan perbedaan ABI dari
melaporkan di $DIST_DIR/abi.report.short
dalam pesan commit.
Pemantauan ABI dan target perangkat
Pemantauan ABI hanya perlu dikonfigurasi untuk target build kernel inti. Campuran
konfigurasi build (yang menentukan base_kernel
) yang dikompilasi langsung dengan
{i>kernel<i} GKI hanya perlu menambahkan dukungan untuk melacak simbol perangkat
daftar.
Definisi ABI harus diupdate menggunakan build GKI.
Lihat juga dokumentasi referensi untuk Kleaf: Mendukung pemantauan ABI (Perangkat).
Versi kernel yang lebih lama
Android 13
Sebagian besar petunjuk untuk
pembuatannya sama dengan
Android 14, tetapi format ABI-nya adalah XML dan
representasi ABI referensinya adalah common/android/abi_gki_aarch64.xml
.
Android 13 dan yang lebih lama
Seperti di Android 13, format ABI adalah XML.
Kernel yang lebih lama menggunakan build.sh
, bukan Kleaf. Untuk pemantauan ABI, Anda harus menggunakan
build_abi.sh
, yang menerima variabel lingkungan yang sama untuk menyesuaikan
build sebagai build.sh
. Contoh:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
Tindakan ini akan mem-build kernel dan mengekstrak representasi ABI ke dalam OUT_DIR
(yang secara default adalah out_abi
) dan setara dengan
Target //common:kernel_aarch64_abi_dist
dari Kleaf (lihat
Build kernel dan artefak ABI).
Representasi ABI referensi disimpan di android/abi_gki_aarch64.xml
sebagai
ditentukan oleh variabel ABI_DEFINITION
di common/build.config.gki.aarch64
.
Jika Anda perlu memperbarui representasi ABI kernel, cara yang paling mudah adalah
untuk menggunakan opsi --update
dan --print-report
:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report
--print-report
mencetak perbedaan ABI di antara file tersebut sebagaimana adanya
dan ABI yang baru dibuat.
Opsi --update
akan menimpa representasi ABI referensi. {i>Tcpdump<i} juga melakukan
tindakan
pembaruan daftar simbol
saat menggunakan BUILD_CONFIG
untuk perangkat dengan KMI_SYMBOL_LIST
yang dikonfigurasi.