Halaman ini menjelaskan cara membuat representasi ABI kernel Android dan menjalankan pemantauan ABI. Hal ini berlaku untuk Android 16 dan yang lebih tinggi. Untuk versi yang lebih rendah, lihat ABI monitor previous kernel versions.
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 mem-build kernel GKI dan artefak ABI:
tools/bazel run //common:kernel_aarch64_abi_dist
Perintah ini akan mem-build representasi ABI saat ini dan menyalinnya ke
$DIST_DIR/abi.stg
bersama dengan kernel dan modul yang di-build. $DIST_DIR
defaultnya adalah out_abi/kernel_aarch64_abi_dist/dist
.
Anda dapat menentukan argumen tambahan untuk alat ABI di akhir perintah
setelah --
. Misalnya, untuk mengubah tujuan ABI dan artefak build, Anda
dapat menggunakan opsi --destdir
:
tools/bazel run //common:kernel_aarch64_abi_dist -- --destdir=out/dist
Menganalisis perbedaan ABI antara build dan representasi referensi
Target //common:kernel_aarch64_abi_dist
, yang dijalankan dalam perintah
sebelumnya, menganalisis dan melaporkan perbedaan ABI yang ditemukan antara build dan
representasi referensi yang berada di common/gki/aarch64/abi.stg
(ditentukan dalam
BUILD.bazel
).
Perbedaan ini dicetak di akhir build, seperti yang ditunjukkan dalam
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
$DIST_DIR/abi_stgdiff/abi.report.short
bersama dengan laporan dalam format lain.
Otomatisasi harus menggunakan kode keluar perintah build, yang bukan nol jika perbedaan ditemukan.
Perhatikan bahwa cabang
fase pengembangan, termasuk android-mainline
, tidak memiliki representasi ABI referensi.
Tanpa itu, //common:kernel_aarch64_abi_dist
tidak akan mendeteksi perbedaan apa pun.
Memperbarui representasi ABI referensi
Setiap perubahan yang memengaruhi ABI kernel, seperti
update daftar simbol,
harus tercermin dalam representasi ABI referensi
(common/gki/aarch64/abi.stg
, yang ditentukan dalam
BUILD.bazel).
Untuk melakukannya, Anda perlu menjalankan perintah berikut:
tools/bazel run //common:kernel_aarch64_abi_update
Perintah ini melakukan semuanya dalam langkah
Menganalisis perbedaan ABI dan juga memperbarui
representasi referensi dalam sumber. ABI yang diperbarui kemudian dapat diupload dalam commit yang sama dengan perubahan. Sertakan perbedaan ABI dari
laporan di $DIST_DIR/abi_stgdiff/abi.report.short
dalam pesan commit.
Pemantauan ABI dan target perangkat
Pemantauan ABI hanya perlu dikonfigurasi untuk target build kernel inti. Konfigurasi build campuran (yang menentukan base_kernel
) yang dikompilasi langsung dengan kernel GKI hanya perlu menambahkan dukungan untuk melacak daftar simbol perangkat.
Definisi ABI harus diperbarui menggunakan build GKI.
Lihat juga dokumentasi referensi untuk Kleaf: Mendukung pemantauan ABI (Perangkat).
Memantau ABI versi kernel sebelumnya (Android 15 dan yang lebih lama)
Untuk versi kernel sebelumnya, petunjuk pembuatan dan pemantauan ABI berbeda sebagai berikut.
Android 15 dan 14
Petunjuknya sebagian besar sama dengan Android 16, kecuali representasi ABI referensi adalah common/android/abi_gki_aarch64.stg
dan $DIST_DIR
yang secara default adalah out_abi/kernel_aarch64/dist
.
Android 13
Android 13 dapat dibuat dengan Kleaf atau dengan skrip build lama.
Untuk Kleaf, petunjuknya sama dengan Android 14, kecuali format ABI adalah XML dan representasi ABI referensi adalah common/android/abi_gki_aarch64.xml
.
Untuk skrip build lama, petunjuknya sama dengan Android 12.
Android 12 dan yang lebih lama
Format ABI adalah XML dan representasi ABI referensi adalah
common/android/abi_gki_aarch64.xml
Kernel ini menggunakan build.sh
, bukan Kleaf. Untuk pemantauan ABI, Anda harus menggunakan
build_abi.sh
, yang menerima variabel lingkungan yang sama untuk menyesuaikan
build seperti build.sh
. Contoh:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
Tindakan ini akan membangun kernel dan mengekstrak representasi ABI ke subdirektori OUT_DIR
(yang secara default adalah out_abi
) dan setara dengan target
//common:kernel_aarch64_abi_dist
Kleaf (lihat
Membangun artefak kernel dan ABI).
Representasi ABI referensi disimpan di android/abi_gki_aarch64.xml
seperti
yang ditentukan oleh variabel ABI_DEFINITION
di common/build.config.gki.aarch64
.
Jika Anda perlu memperbarui representasi ABI kernel, cara paling mudah adalah
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 antara file yang ada
dan ABI yang baru dibuat.
Opsi --update
akan menggantikan representasi ABI referensi. Fitur ini juga melakukan
pembaruan daftar simbol
saat menggunakan BUILD_CONFIG
untuk perangkat dengan KMI_SYMBOL_LIST
yang dikonfigurasi.