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 derlenmiş 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, modüller tarafından Cuttlefish için kullanılan simgeler android/abi_gki_aarch64_virtual_device
içinde depolanır.
Simge listesi oluşturma işlemi 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
Cihaz
kernel_build
hedefinin adını içermelidir.
Aşağıdaki seçenekleri de kullanabilirsiniz:
kernel_modules
Ağa bağlı olmayan modüllerin hedeflerinin listesi. Ağaç içi 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. Sembol kaldırmaya yalnızca KMI stabilizasyonu sırasında belirli zamanlarda izin verilir ve KMI soğuduktan sonra izin verilmez.
Bu, aynı simge listesini birden fazla farklı cihaz için kullandığınızda da faydalı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 simgeleri gruplandırır. Aksi takdirde, simge listesi tüm çekirdek modülleri tarafından kullanılan simgelerin sıralanmış bir listesidir.
common-modules/virtual-device/BUILD.bazel sayfasını inceleyin. Örneğin:
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 simgeleri KMI'nin bir parçası haline getirmek için, sembol listesinin değiştirildiğini Android Ortak Çekirdeği'ne içeren bir yama gönderin.
Kaydetme mesajı, eklenen veya kaldırılan sembollerin 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 sembol 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.