Sabit tutulması gereken sembollerin ve türlerin yüzeyini azaltmak için GKI çekirdeği, dışa aktarılan sembolleri yalnızca modüllerin ihtiyaç duyduğu sembollerle sınırlama işlevine sahiptir. Harici olarak derlenen modüller için, bunların GKI çekirdeği tarafından dışa aktarılabilmesini sağlamak amacıyla kullanılan sembollerin bir listesine sahip olmanız gerekir. Örneğin, Mürekkepbalığı modülleri tarafından kullanılan semboller android/abi_gki_aarch64_virtual_device
dosyasında depolanır.
Sembol listesi oluşturmak için bir hedef ekleyin
Sembol listeleri kernel_abi
hedefi tarafından oluşturulur. Bu hedefi aşağıdaki seçeneklerle BUILD.bazel
cihazına ekleyin:
name
<kernel_build>_abi
formatında olmalıdır.kernel_build
kernel_build
hedefinin adını içermelidir.
Aşağıdaki seçenekleri de kullanabilirsiniz:
kernel_modules
Ağaç dışı modüller için hedeflerin listesi. Ağaç içi modüller buraya dahil edilmemelidir. Sembol çıkarma için ağaç içi modülleri hazırlama konusuna bakın.
kmi_symbol_list_add_only
Bu seçenek kullanılmayan simgelerin kaldırılmasını engeller. Sembolün kaldırılmasına yalnızca KMI stabilizasyonu sırasında belirli zamanlarda izin verilir ve KMI dondurulduktan sonra buna izin verilmez.
Bu aynı zamanda birden fazla farklı cihaz için aynı sembol listesini kullandığınızda da kullanışlıdır. Bu şekilde A cihazı tarafından kullanılan ancak B cihazı tarafından kullanılmayan semboller kaldırılmaz.
module_grouping
True
veya belirtilmemişse, sembol listesi sembolleri, sembole başvuran çekirdek modüllerine göre gruplandırır. Aksi takdirde sembol listesi, tüm çekirdek modülleri tarafından kullanılan sembollerin sıralanmış bir listesi olacaktır.
Örneğin common-modules/virtual-device/BUILD.bazel'e bakın:
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,
)
Ayrıca Kleaf'teki kernel_abi
hedefiyle ilgili referans belgelere bakın.
Sembol çıkarımı için ağaç içi modüller hazırlama
Ağaç içi modülleri sembol çıkarımına hazırlamak için, satıcıya özgü ağaç içi modülleri kernel_build
hedefinin module_outs
özelliğinde listeleyin. Örnek için _VIRT_COMMON_MODULES
ve kullanımına bakın. Bu listeye GKI modüllerini dahil etmeyin.
Bu modülleri imzasız olacak şekilde yapılandırın, aksi halde sembol listesi boş olabilir. Bunu yapmak için bu satırı çekirdek yapılandırma parçalarınıza ekleyin:
# CONFIG_MODULE_SIG_ALL is not set
Örneğin common-modules/virtual-device/virtual_device_core.fragment'e bakın.
Cihaz çekirdeği yapısına bir cihaz sembolü listesi ekleme
BUILD.bazel
aygıtında tanımlanan kernel_build
hedefine kmi_symbol_list
niteliğini ekleyin. Sembol listesinin adı //common:android/abi_gki_<arch>_<device>
formatında olmalıdır. Örneğin common-modules/virtual-device/BUILD.bazel'e bakın:
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,
)
Bir başlangıç sembol listesi oluşturup gönderin
common/android/abi_gki_<arch>_<device>
adresinde boş bir sembol listesi oluşturun. Yukarıdaki örnek için komut şöyle olacaktır:
touch common/android/abi_gki_aarch64_virtual_device
Bu dosyayı temel GKI çekirdek yapısının additional_kmi_symbol_lists
ekleyin. Örneğin, //common:android/abi_gki_aarch64_virtual_device
, common/BUILD.bazel dosyasında bildirilen aarch64_additional_kmi_symbol_lists
dosya grubuna eklenir.
Yeni sembol listesini doldurmak için cihaz sembol listesini güncelleyin ve bunu Android Common Kernel deposuna gönderin.
Cihaz sembolü listesini güncelleme
kernel_build
module_outs
ve kernel_abi
kernel_modules
modüller tarafından kullanılan tüm çekirdek çekirdek sembolleri, sembol listesine dahil edilmelidir. Bu, kernel_abi
hedefini _update_symbol_list
sonekiyle çalıştırarak yapılabilir. Örneğin, aşağıdaki komut //common-modules/virtual-device:virtual_device_aarch64
için sembol listesini günceller:
tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_abi_update_symbol_list
ACK'ya bir sembol listesi güncellemesi gönder
Yeni sembolleri KMI'nin bir parçası haline getirmek için Android Common Kernel gerrit'ine sembol listesi değişikliğini içeren bir yama gönderin.
Taahhüt mesajı, eklenen veya kaldırılan sembollerin bir listesini içermelidir. Küçük bir sembol listesi güncellemesi için bu listeyi manuel olarak yazabilir veya referans ABI gösterimini güncelledikten sonra $DIST_DIR/abi.report.short
raporunu kullanabilirsiniz.
Bir sembol listesi güncellemesi göndermeden önce referans ABI gösteriminin güncellenmesi gerekli olmasa da, ekstra ön gönderim adımlarını ortadan kaldırabilir ve değişikliğin daha hızlı gönderilmeye hazır olmasını sağlayabilir. Her durumda, ön gönderim sırasında kontrol edilecek ve gerekirse güncellenecektir.
Eski sürümler (Android 12 ve altı)
build_abi.sh
aracını aşağıdaki gibi kullanın:
BUILD_CONFIG=path/to/build.config.device build/build_abi.sh --update-symbol-list
Bu örnekte build.config.device
şu yapılandırma seçeneklerini içermelidir:
vmlinux
FILES
listesinin bir parçası olmalıdır. Bu,build.config.aarch64
eklenerek yapılabilir.KMI_SYMBOL_LIST
Güncellemek için ayarlanmalı ve KMI sembol listesine işaret edilmelidir.
Cihaz sembolü listesini güncelledikten sonra, bu değişiklikleri GKI yapısına da yansıtmanız gerekir ( common/build.config.gki.aarch64
):
Güncellenen sembol listesini
common/android/abi_gki_aarch64_<device>
dizinine kopyalayın.android/abi_gki_aarch64_<device>
common/build.config.gki.aarch64
dosyasındakiADDITIONAL_KMI_SYMBOL_LISTS
listesine dahil edilip edilmediğini kontrol edin.