Sembol listeleriyle çalışma

Sabit olarak korunması gereken simge ve türlerin görünürlüğünü azaltmak için GKI çekirdeği, dışa aktarılan simgeleri yalnızca bazı örnekler vardır. Harici olarak derlenmiş modüller için bir listenizin olması gerekir GKI çekirdeği tarafından dışa aktarılmasına izin vermek için kullanılan semboller Örneğin, kullanılan simgelerin Kesiş balığı saksıları inç android/abi_gki_aarch64_virtual_device.

Sembol listesi oluşturmak için hedef ekle

Sembol listeleri, kernel_abi hedefi tarafından oluşturulur. Bu hedefi aşağıdaki seçeneklerle BUILD.bazel cihazı:

  • 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ç dışı modüllerin hedeflerinin listesi. Ağaç içi modüller dahil edilir. Referans Ağaç içi modülleri sembol ayıklama için hazırlayın.

  • kmi_symbol_list_add_only

    Bu seçenek, kullanılmayan simgelerin kaldırılmasını engeller. Sembol kaldırma KMI sırasında belirli zamanlarda izin verilir sabitleştirme ve KMI'ye izin verilmez. donduruldu.

    Bu, aynı simge listesini birden fazla farklı öğe için kullandığınızda da cihazlar. Bu şekilde, A cihazı tarafından kullanılan simgeler kaldırılırken B cihazı kaldırılmaz.

  • module_grouping

    True değeri veya belirtilmediyse simge listesi, simgeleri çekirdek modüllerini geliştirmeye devam edin. Aksi takdirde simge listesi tüm çekirdek modülleri tarafından kullanılan simgelerin sıralı bir listesidir.

Görüntüleyin ortak-modüller/virtual-device/BUILD.bazel ö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,
)

Şunlara da bakabilirsiniz: referans belgeleri Kleaf'teki kernel_abi hedefinde.

Ağaç içi modülleri simge ayıklama için hazırlama

Ağaç içi modülleri sembol ayıklamaya hazırlamak için satıcıya özgü ağaç içi modülleri listeleyin modüllerini kernel_build hedefinin module_outs özelliğinde bulabilirsiniz. Görüntüleyin _VIRT_COMMON_MODULES ve kullanımı inceleyebilirsiniz. Bu listeye GKI modüllerini eklemeyin.

Bu modülleri, imzasız, Aksi takdirde simge listesi boş olabilir. Bunu yapmak için bu satırı çekirdeğinize ekleyin yapılandırma parçaları:

# CONFIG_MODULE_SIG_ALL is not set

Görüntüleyin ortak-modüller/virtual-device/virtual_device_core.fragman örneğine bakalım.

Cihaz çekirdek yapısına cihaz simgesi listesi ekleme

kmi_symbol_list özelliğini şunda tanımlanan kernel_build hedefine ekleyin: cihaz BUILD.bazel. Sembol listesinin adı şu biçimde olmalıdır: //common:android/abi_gki_<arch>_<device> Görüntüleyin common-modules/virtual-device/BUILD.bazel örneğin:

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 sembol listesini oluşturma ve gönderme

common/android/abi_gki_<arch>_<device> adresinde boş bir sembol listesi oluşturun. aşağıdaki örnekteki gibidir:

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, Örneğin, //common:android/abi_gki_aarch64_virtual_device aarch64_additional_kmi_symbol_lists dosya grubu, belirtilen common/BUILD.bazel'i seçin.

Yeni simge listesini doldurmak için cihaz simgesi listesini güncelleyin ve Android Ortak Kernel deposuna gönderin.

Cihaz simge listesini güncelleme

kernel_build ve module_outs içindeki modüller tarafından kullanılan tüm temel çekirdek simgeleri kernel_modules/kernel_abi, simge listesine eklenmelidir. Bu kernel_abi hedefi _update_symbol_list ile çalıştırılarak yapılabilir. soneki kullanmanız gerekir. Örneğin, aşağıdaki komut //common-modules/virtual-device:virtual_device_aarch64:

tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_abi_update_symbol_list

ACK'ye sembol listesi güncellemesi gönder

Sembol listesi değişikliğini içeren Android Ortak Çekirdek yeni sembolleri KMI'nin bir parçası haline getirmek için gerrit'i kullanıyoruz.

Kaydetme mesajı, eklenen veya kaldırılan sembollerin listesini içermelidir. Şunları yapabilirsiniz: Bu listeyi küçük bir simge listesi güncellemesi için manuel olarak yazın veya Şu tarihten sonra $DIST_DIR/abi.report.short rapor: referans ABI'yı güncelleyerek temsil eder.

Referans ABI'yi güncellerken temsil bir simge listesi güncellemesi göndermenize gerek olmadığından, ve değişikliği daha hızlı gönderilmeye hazır hale getirin. Her koşulda, kontrol edilir ve gerekiyorsa 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 şu yapılandırma seçeneklerini içermelidir:

  • vmlinux

    FILES listesinin bir parçası olmalıdır. Bu, build.config.aarch64

  • KMI_SYMBOL_LIST

    Güncelleme için ayarlanmalı ve KMI simge listesine işaretlenmelidir.

Cihaz simge listesini güncelledikten sonra, bu değişiklikleri GKI derlemesi (common/build.config.gki.aarch64):

  • Güncellenen simge listesini common/android/abi_gki_aarch64_<device> hedefine kopyalayın.

  • android/abi_gki_aarch64_<device> adlı içeriğin şuna dahil olduğundan emin olun: common/build.config.gki.aarch64 içinde ADDITIONAL_KMI_SYMBOL_LISTS.

  • Simge listesi güncellemesini ACK'ye gönderin.