Sabit kalması gereken simge ve türlerin yüzeyini azaltmak için GKI çekirdeği, dışa aktarılan simgeleri yalnızca modüllerin ihtiyaç duyduğu simgelerle sınırlama özelliklerine sahiptir. Harici olarak derlenen modüllerin GKI çekirdeği tarafından dışa aktarılmasına izin vermek için kullanılan sembollerin bir listesine sahip olmanız gerekir. Örneğin, Mürekkep Balığı için modüller tarafından kullanılan simgeler android/abi_gki_aarch64_virtual_device
içinde saklanır.
Simge listesi oluşturma için hedef ekleme
Simge listeleri kernel_abi
hedefi tarafından oluşturulur. Aşağıdaki seçeneklerle bu hedefi BUILD.bazel
cihazına ekleyin:
name
<kernel_build>_abi
biçiminde olmalıdır.kernel_build
kernel_build
hedef cihazın adını içermelidir.
Aşağıdaki seçenekleri de kullanabilirsiniz:
kernel_modules
Ağa bağlı olmayan modüllerin hedeflerinin listesi. Ağa bağlı modüller buraya dahil edilmemelidir. Ağa yerleştirilmiş modülleri sembol ayıklama için hazırlama başlıklı makaleyi inceleyin.
kmi_symbol_list_add_only
Bu seçenek, kullanılmayan simgelerin kaldırılmasını engeller. Semboller yalnızca KMI sabitlenirken belirli zamanlarda kaldırılabilir. KMI dondurulduğunda ise sembol kaldırma işlemine izin verilmez.
Bu, aynı simge listesini birden fazla farklı cihazda kullandığınızda da yararlıdır. Bu sayede, A cihazı tarafından kullanılan ancak B cihazı tarafından kullanılmayan semboller kaldırılmaz.
module_grouping
True
ise veya belirtilmezse simge listesi, simgelere referans veren çekirdek modüllerine göre simge gruplandırır. Aksi takdirde, simge listesi tüm çekirdek modülleri tarafından kullanılan simgelerin sıralanmış bir listesidir.
Örneğin, common-modules/virtual-device/BUILD.bazel dosyasına 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,
)
Kleaf'teki kernel_abi
hedefiyle ilgili referans belgelerine de bakın.
Ağdaki modülleri simge ayıklama için hazırlama
Ağ içi modülleri sembol ayıklama için hazırlamak üzere tedarikçi firmaya özgü ağ içi modülleri kernel_build
hedefinin module_outs
özelliğinde listeleyin. Örnek olarak _VIRT_COMMON_MODULES
ve kullanımına bakın. Bu listeye GKI modüllerini eklemeyin.
Bu modülleri imzasız olacak şekilde yapılandırın. Aksi takdirde simge listesi boş olabilir. Bunu yapmak için çekirdek yapılandırma parçalarınıza şu satırı ekleyin:
# CONFIG_MODULE_SIG_ALL is not set
Örneğin, common-modules/virtual-device/virtual_device_core.fragment dosyasını inceleyin.
Cihaz çekirdek derlemesine cihaz sembol listesi ekleme
kmi_symbol_list
özelliğini, BUILD.bazel
cihazında tanımlanan kernel_build
hedefine ekleyin. Simge listesinin adı //common:android/abi_gki_<arch>_<device>
biçiminde olmalıdır. Örneğin, common-modules/virtual-device/BUILD.bazel dosyasına 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,
)
İlk simge listesi oluşturma ve gönderme
common/android/abi_gki_<arch>_<device>
konumunda boş bir simge listesi oluşturun. Yukarıdaki örnekte komut şu şekilde olur:
touch common/android/abi_gki_aarch64_virtual_device
Bu dosyayı temel GKI çekirdek derlemesinin additional_kmi_symbol_lists
bölümüne ekleyin. Örneğin, //common:android/abi_gki_aarch64_virtual_device
, common/BUILD.bazel dosya grubunda tanımlanan aarch64_additional_kmi_symbol_lists
dosya grubuna eklenir.
Yeni simge listesini doldurmak ve Android Ortak Çekirdek deposuna göndermek için cihaz simge listesini güncelleyin.
Cihaz simgesi listesini güncelleme
kernel_build
'un module_outs
bölümündeki ve kernel_abi
'ın kernel_modules
bölümündeki modüller tarafından kullanılan tüm temel çekirdek sembolleri simge listesine dahil edilmelidir. Bu işlem, kernel_abi
hedefini _update_symbol_list
son ekiyle çalıştırarak yapılabilir. Örneğin, aşağıdaki komut //common-modules/virtual-device:virtual_device_aarch64
için simge listesini günceller:
tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_abi_update_symbol_list
ACK'ye bir simge listesi güncellemesi gönderme
Yeni simgelerin KMI'nin bir parçası olması için simge listesi değişikliğini içeren bir yama göndererek Android Ortak Çekirdeği Gerrit'e gönderin.
Taahhüt mesajı, eklenen veya kaldırılan simgelerin listesini içermelidir. Küçük bir simge listesi güncellemesi için bu listeyi manuel olarak yazabilir veya referans ABI temsilini güncelledikten sonra $DIST_DIR/abi.report.short
raporunu kullanabilirsiniz.
Bir simge listesi güncellemesi göndermeden önce referans ABI temsilini güncellemek gerekli olmasa da bu işlem, ek göndermeden önce adımlardan kurtulmanıza ve değişikliği daha hızlı göndermeye hazır hale getirmenize yardımcı olabilir. Her durumda, göndermeden önce kontrol edilir ve gerekirse güncellenir.
Eski sürümler (Android 12 ve önceki sürümler)
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
aşağıdaki yapılandırma seçeneklerini içermelidir:
vmlinux
FILES
listesinin bir parçası olmalıdır. Bunu yapmak içinbuild.config.aarch64
ekleyebilirsiniz.KMI_SYMBOL_LIST
Güncelleme için ayarlanmalı ve KMI simge listesine yönlendirilmelidir.
Cihaz simgesi listesini güncelledikten sonra bu değişiklikleri GKI derlemesine (common/build.config.gki.aarch64
) de yansıtmanız gerekir:
Güncellenen simge listesini
common/android/abi_gki_aarch64_<device>
alanına kopyalayın.android/abi_gki_aarch64_<device>
değerinincommon/build.config.gki.aarch64
içindekiADDITIONAL_KMI_SYMBOL_LISTS
değerine dahil edildiğinden emin olun.