Untuk mengurangi permukaan simbol dan jenis
yang perlu dijaga agar tetap stabil,
{i>kernel<i} GKI memiliki kemampuan untuk membatasi simbol
yang diekspor hanya untuk simbol yang
yang dibutuhkan oleh modul. Untuk modul yang dikompilasi secara eksternal, Anda harus memiliki daftar
simbol yang digunakan agar bisa
diekspor oleh {i>kernel<i} GKI. Misalnya,
simbol yang digunakan
oleh modul untuk
Sittlefish disimpan
inci
android/abi_gki_aarch64_virtual_device
Menambahkan target untuk pembuatan daftar simbol
Daftar simbol dibuat oleh target kernel_abi
. Tambahkan target ini ke
perangkat BUILD.bazel
dengan opsi berikut:
name
Harus dalam format
<kernel_build>_abi
.kernel_build
Harus berisi nama perangkat target
kernel_build
.
Anda juga dapat menggunakan opsi berikut:
kernel_modules
Daftar target untuk modul out-of-tree. Modul In-tree tidak boleh disertakan di sini. Rujuk ke 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 KMI stabilisasi dan tidak diizinkan setelah KMI dibekukan.
Ini juga berguna bila Anda menggunakan daftar simbol yang sama untuk beberapa perangkat. Dengan cara ini, {i>tool<i} ini tidak akan menghapus simbol yang digunakan oleh perangkat A, tetapi tidak perangkat B.
module_grouping
Jika
True
atau tidak ditentukan, simbol akan mengelompokkan simbol berdasarkan modul {i>kernel<i} yang mereferensikan simbol tersebut. Jika tidak, daftar simbol itu merupakan daftar simbol yang diurutkan yang digunakan oleh semua modul {i>kernel<i}.
Lihat common-modules/virtual-device/BUILD.bazel misalnya:
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 untuk ekstraksi simbol, cantumkan dalam hierarki khusus vendor
modul dalam atribut module_outs
dari target kernel_build
. Lihat
_VIRT_COMMON_MODULES
dan
penggunaannya
sebagai contoh. Jangan sertakan modul GKI dalam daftar ini.
Konfigurasikan modul-modul ini agar tidak bertanda tangan, jika tidak daftar simbol mungkin kosong. Untuk melakukannya, tambahkan baris ini ke {i>kernel<i} Anda config fragment:
# CONFIG_MODULE_SIG_ALL is not set
Lihat common-modules/virtual-device/virtual_device_core.fragment ke titik akhir pelanggan.
Menambahkan daftar simbol perangkat ke build kernel perangkat
Tambahkan atribut kmi_symbol_list
ke target kernel_build
yang ditentukan di
perangkat BUILD.bazel
. 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 perintah tersebut adalah:
touch common/android/abi_gki_aarch64_virtual_device
Tambahkan file ini ke additional_kmi_symbol_lists
build kernel GKI dasar. Sebagai
contoh, //common:android/abi_gki_aarch64_virtual_device
ditambahkan ke
Grup file aarch64_additional_kmi_symbol_lists
, dideklarasikan di
common/BUILD.bazel.
Perbarui daftar simbol perangkat untuk mengisi daftar simbol baru dan kirimkan ke repositori Kernel Umum Android.
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 dimasukkan dalam daftar simbol. Hal ini dapat
dilakukan dengan menjalankan target kernel_abi
dengan _update_symbol_list
akhiran. Misalnya, perintah berikut 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 Android Umum {i>Kernel<i} gerrit untuk membuat simbol-simbol baru menjadi 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
$DIST_DIR/abi.report.short
laporan setelahnya
memperbarui ABI referensi
representasi visual.
Saat mengupdate ABI referensi representasi sebelum mengirim pembaruan daftar simbol tidak diperlukan, maka mungkin akan menghilangkan langkah pra-pengiriman dan membuat perubahan siap dikirim dengan lebih cepat. Bagaimanapun, itu 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 merupakan 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 di
build GKI (common/build.config.gki.aarch64
):
Salin daftar simbol yang diperbarui ke
common/android/abi_gki_aarch64_<device>
.Periksa apakah
android/abi_gki_aarch64_<device>
disertakan dalamADDITIONAL_KMI_SYMBOL_LISTS
dalamcommon/build.config.gki.aarch64
.