Menjalankan pemantauan ABI

Halaman ini menjelaskan cara membuat representasi ABI kernel Android dan menjalankan pemantauan ABI. Halaman ini berlaku untuk Android 16 dan yang lebih tinggi. Untuk versi yang lebih rendah, lihat Pemantauan ABI versi kernel sebelumnya.

Lihat juga dokumentasi referensi untuk Kleaf: Mendukung pemantauan ABI (GKI) dan Mendukung pemantauan ABI (Perangkat).

Mem-build 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 mem-build representasi ABI saat ini dan menyalinnya ke $DIST_DIR/abi.stg bersama dengan kernel dan modul yang di-build. $DIST_DIR secara default adalah out_abi/kernel_aarch64_abi_dist/dist.

Anda dapat menentukan argumen tambahan untuk alat ABI di akhir perintah setelah --. Misalnya, untuk mengubah tujuan artefak ABI dan 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 dieksekusi dalam perintah sebelumnya, menganalisis dan melaporkan perbedaan ABI yang ditemukan antara build dan representasi referensi yang terletak 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 representasi ABI referensi, //common:kernel_aarch64_abi_dist tidak akan mendeteksi perbedaan apa pun.

Memperbarui representasi ABI referensi

Setiap perubahan yang memengaruhi ABI kernel, seperti pembaruan daftar simbol, harus tercermin dalam representasi ABI referensi (common/gki/aarch64/abi.stg, yang ditentukan dalam BUILD.bazel). Untuk melakukannya, Anda harus menjalankan perintah berikut:

tools/bazel run //common:kernel_aarch64_abi_update

Perintah ini melakukan semua hal 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).

Pemantauan ABI versi kernel sebelumnya (Android 15 dan yang lebih rendah)

Untuk versi kernel sebelumnya, petunjuk build dan pemantauan ABI berbeda sebagai berikut.

Android 15 dan 14

Petunjuknya sebagian besar sama dengan Android 16, kecuali bahwa representasi ABI referensi adalah common/android/abi_gki_aarch64.stg dan $DIST_DIR secara default adalah out_abi/kernel_aarch64/dist.

Android 13

Android 13 dapat di-build dengan Kleaf atau dengan skrip build lama.

Untuk Kleaf, petunjuknya sama dengan Android 14, kecuali bahwa 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 rendah

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 sebagai build.sh. Contoh:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh

Tindakan ini mem-build kernel dan mengekstrak representasi ABI ke dalam subdirektori OUT_DIR (yang secara default adalah out_abi) dan setara dengan target //common:kernel_aarch64_abi_dist Kleaf (lihat Mem-build kernel dan artefak 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 menimpa representasi ABI referensi. Opsi ini juga melakukan pembaruan daftar simbol saat menggunakan BUILD_CONFIG untuk perangkat dengan KMI_SYMBOL_LIST yang dikonfigurasi.