Untuk mengurangi platform simbol dan jenis yang perlu dipertahankan agar stabil,
kernel GKI memiliki kemampuan untuk membatasi simbol yang diekspor hanya pada simbol yang
diperlukan oleh modul. Untuk modul yang dikompilasi secara eksternal, Anda harus memiliki daftar
simbol yang digunakan agar dapat diekspor oleh kernel GKI. Misalnya,
simbol yang digunakan oleh modul untuk
Cuttlefish disimpan
di
android/abi_gki_aarch64_virtual_device
.
Menambahkan target untuk pembuatan daftar simbol
Daftar simbol dibuat oleh target kernel_abi
. Tambahkan target ini ke
BUILD.bazel
perangkat dengan opsi berikut:
name
Harus dalam format
<kernel_build>_abi
.kernel_build
Harus berisi nama target
kernel_build
perangkat.
Anda juga dapat menggunakan opsi berikut:
kernel_modules
Daftar target untuk modul out-of-tree. Modul In-tree tidak boleh disertakan di sini. Lihat Menyiapkan modul dalam hierarki untuk ekstraksi simbol.
kmi_symbol_list_add_only
Opsi ini mencegah penghapusan simbol yang tidak digunakan. Penghapusan simbol hanya diizinkan pada waktu tertentu selama stabilisasi KMI dan tidak diizinkan setelah KMI dibekukan.
Hal ini juga berguna jika Anda menggunakan daftar simbol yang sama untuk beberapa perangkat yang berbeda. Dengan cara ini, simbol yang digunakan oleh perangkat A tidak akan dihapus, tetapi perangkat B akan dihapus.
module_grouping
Jika
True
atau tidak ditentukan, daftar simbol akan mengelompokkan simbol berdasarkan modul kernel yang mereferensikan simbol. Jika tidak, daftar simbol adalah daftar simbol yang diurutkan yang digunakan oleh semua modul kernel.
Lihat common-modules/virtual-device/BUILD.bazel sebagai contoh:
kernel_abi(
name = "virtual_device_aarch64_abi",
kernel_build = ":virtual_device_aarch64",
kernel_modules = [
":virtual_device_aarch64_external_modules",
],
kmi_symbol_list_add_only = True,
)
Lihat juga
dokumentasi referensi
pada target kernel_abi
di Kleaf.
Menyiapkan modul dalam hierarki untuk ekstraksi simbol
Untuk menyiapkan modul dalam hierarki guna mengekstrak simbol, cantumkan modul dalam hierarki
khusus vendor dalam atribut module_outs
dari target kernel_build
. Lihat
_VIRT_COMMON_MODULES
dan
penggunaannya
untuk contoh. Jangan sertakan modul GKI dalam daftar ini.
Konfigurasi modul ini agar tidak ditandatangani. Jika tidak, daftar simbol mungkin kosong. Untuk melakukannya, tambahkan baris ini ke fragmen konfigurasi kernel Anda:
# CONFIG_MODULE_SIG_ALL is not set
Lihat common-modules/virtual-device/virtual_device_core.fragment sebagai contoh.
Menambahkan daftar simbol perangkat ke build kernel perangkat
Tambahkan atribut kmi_symbol_list
ke target kernel_build
yang ditentukan di
BUILD.bazel
perangkat. Nama daftar simbol harus dalam format
//common:android/abi_gki_<arch>_<device>
. Lihat
common-modules/virtual-device/BUILD.bazel,
misalnya:
kernel_build(
name = "virtual_device_aarch64",
base_kernel = "//common:kernel_aarch64",
kmi_symbol_list = "//common:android/abi_gki_aarch64_virtual_device",
...
module_outs = _VIRT_COMMON_MODULES + _VIRT_AARCH64_MODULES,
)
Membuat dan mengirimkan daftar simbol awal
Buat daftar simbol kosong di common/android/abi_gki_<arch>_<device>
. Untuk
contoh di atas, perintahnya adalah:
touch common/android/abi_gki_aarch64_virtual_device
Tambahkan file ini ke additional_kmi_symbol_lists
build kernel GKI dasar. Misalnya, //common:android/abi_gki_aarch64_virtual_device
ditambahkan ke
filegroup aarch64_additional_kmi_symbol_lists
, yang dideklarasikan di
common/BUILD.bazel.
Perbarui daftar simbol perangkat untuk mengisi daftar simbol baru dan mengirimnya ke repositori Android Common Kernel.
Memperbarui daftar simbol perangkat
Semua simbol kernel inti yang digunakan oleh modul di module_outs
dari kernel_build
dan
kernel_modules
dari kernel_abi
harus disertakan dalam daftar simbol. Hal ini dapat
dilakukan dengan menjalankan target kernel_abi
dengan akhiran
_update_symbol_list
. Misalnya, perintah berikut akan memperbarui daftar simbol untuk
//common-modules/virtual-device:virtual_device_aarch64
:
tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_abi_update_symbol_list
Mengirim pembaruan daftar simbol ke ACK
Kirim patch dengan perubahan daftar simbol ke gerrit Android Common Kernel untuk menjadikan simbol baru sebagai bagian dari KMI.
Pesan commit harus menyertakan daftar simbol yang ditambahkan atau dihapus. Anda dapat
menulis daftar ini secara manual untuk pembaruan daftar simbol kecil atau menggunakan
laporan $DIST_DIR/abi.report.short
setelah
memperbarui representasi
ABI referensi.
Meskipun memperbarui representasi ABI referensi sebelum mengirim pembaruan daftar simbol tidak diperlukan, tindakan ini dapat menghilangkan langkah prapengiriman tambahan dan membuat perubahan siap dikirim lebih cepat. Bagaimanapun, ID ini diperiksa dan diperbarui jika perlu selama pra-pengiriman.
Versi lama (Android 12 dan yang lebih lama)
Gunakan alat build_abi.sh
sebagai berikut:
BUILD_CONFIG=path/to/build.config.device build/build_abi.sh --update-symbol-list
Dalam contoh ini, build.config.device
harus menyertakan opsi konfigurasi berikut:
vmlinux
Harus menjadi bagian dari daftar
FILES
. Hal ini dapat dilakukan dengan menyertakanbuild.config.aarch64
.KMI_SYMBOL_LIST
Harus disetel dan diarahkan ke daftar simbol KMI untuk memperbarui.
Setelah memperbarui daftar simbol perangkat, Anda juga perlu mencerminkan perubahan ini dalam
build GKI (common/build.config.gki.aarch64
):
Salin daftar simbol yang diperbarui ke
common/android/abi_gki_aarch64_<device>
.Pastikan
android/abi_gki_aarch64_<device>
disertakan dalamADDITIONAL_KMI_SYMBOL_LISTS
dicommon/build.config.gki.aarch64
.