Bagian ini menjelaskan cara membuat representasi ABI kernel Android dan menjalankan pemantauan ABI. Ini berlaku untuk Android 14 dan lebih tinggi. Untuk versi yang lebih lama, silakan lihat Versi kernel yang lebih lama .
Lihat juga dokumentasi referensi untuk Kleaf: Mendukung pemantauan ABI (GKI) dan Mendukung pemantauan ABI (Perangkat) .
Bangun kernel dan representasi ABI-nya
Setelah mengunduh 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
bersama dengan kernel dan modul yang dibangun.
Anda dapat menentukan argumen tambahan untuk perkakas ABI di akhir perintah setelah --
. Misalnya untuk mengubah tujuan ABI dan membuat artefak, Anda dapat menggunakan opsi --dist_dir
:
tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist
Analisis perbedaan ABI antara build dan representasi referensi
Target //common:kernel_aarch64_abi_dist
, yang dijalankan pada perintah di atas, menganalisis dan melaporkan setiap perbedaan ABI yang ditemukan antara representasi build dan referensi yang terletak di common/android/abi_gki_aarch64.stg
(didefinisikan dalam BUILD.bazel ). Perbedaan ini akan dicetak di akhir pembuatan, 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
beserta laporan dalam format lain.
Otomatisasi harus menggunakan kode keluar perintah build, yang tidak akan nol jika ditemukan perbedaan.
Harap perhatikan bahwa cabang fase pengembangan , termasuk android-mainline
, tidak memiliki representasi referensi ABI. Tanpanya, //common:kernel_aarch64_abi_dist
tidak akan mendeteksi perbedaan apa pun.
Perbarui representasi referensi ABI
Setiap perubahan yang memengaruhi ABI kernel, seperti pembaruan daftar simbol , perlu tercermin dalam representasi ABI referensi ( common/android/abi_gki_aarch64.stg
, didefinisikan dalam BUILD.bazel ). Untuk melakukannya, Anda perlu menjalankan perintah berikut:
tools/bazel run //common:kernel_aarch64_abi_update
Perintah ini melakukan semua yang ada di langkah Analisis perbedaan ABI dan juga memperbarui representasi referensi di sumber. ABI yang diperbarui kemudian dapat diunggah dalam komit yang sama dengan perubahan. Harap sertakan perbedaan ABI dari laporan di $DIST_DIR/abi.report.short
dalam pesan penerapan.
Pemantauan ABI dan target perangkat
Pemantauan ABI hanya perlu dikonfigurasi untuk target pembangunan kernel inti. Konfigurasi build campuran (yang mendefinisikan 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) .
Versi kernel yang lebih lama
Android 13
Petunjuk build sebagian besar sama dengan Android 14, hanya saja format ABI-nya adalah XML dan representasi ABI referensinya adalah common/android/abi_gki_aarch64.xml
.
Android 12 dan lebih rendah
Seperti di Android 13, format ABI adalah XML.
Kernel 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
. Misalnya:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
Ini membangun kernel dan mengekstrak representasi ABI ke dalam subdirektori OUT_DIR
(yang merupakan out_abi
secara default) dan setara dengan target //common:kernel_aarch64_abi_dist
dari Kleaf (lihat Membangun kernel dan artefak ABI ).
Referensi representasi ABI 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 kernel ABI, cara paling mudah adalah dengan 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
menimpa representasi referensi ABI. Itu juga memperbarui daftar simbol saat menggunakan BUILD_CONFIG
untuk perangkat dengan KMI_SYMBOL_LIST
dikonfigurasi.