Praca z listami symboli

Aby zmniejszyć powierzchnię symboli i typów, które wymagają utrzymywania stabilności, jądro GKI umożliwia ograniczenie eksportowanych symboli tylko do tych, są potrzebne modułom. W przypadku zewnętrznych kompilowanych modułów wymagana jest lista które pozwala na wyeksportowanie ich przez jądro GKI. Przykład: symboli używanych przez moduły do Mątwy są przechowywane cale android/abi_gki_aarch64_virtual_device.

Dodaj środowisko docelowe do generowania listy symboli

Listy symboli są generowane przez środowisko docelowe kernel_abi. Dodaj ten cel do urządzenia BUILD.bazel z tymi opcjami:

  • name

    Powinien mieć format <kernel_build>_abi.

  • kernel_build

    Powinno zawierać nazwę urządzenia docelowego kernel_build.

Możesz też użyć tych opcji:

  • kernel_modules

    Lista celów dla modułów spoza drzewa. Moduły w drzewie nie powinny zostać tu uwzględnione. Więcej informacji: Przygotuj moduły w drzewie do wyodrębniania symboli.

  • kmi_symbol_list_add_only

    Ta opcja zapobiega usunięciu nieużywanych symboli. Usuwanie symboli dotyczy tylko dozwolone w określonych momentach KMI stabilizacja i nie jest dozwolone po wprowadzeniu KMI Zablokowane.

    Jest to przydatne również wtedy, gdy używasz tej samej listy symboli dla wielu różnych urządzenia. Symbole używane przez urządzenie A, ale nie B, nie zostaną usunięte.

  • module_grouping

    Jeśli wartość to True lub nie jest określona, lista symboli grupuje symbole na podstawie i modułów jądra, które odwołują się do tego symbolu. W przeciwnym razie lista symboli jest sortowana lista symboli używanych przez wszystkie moduły jądra.

Zobacz common-modules/virtual-device/BUILD.bazel np.:

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,
)

Zobacz też dokumentacja referencyjna dla wartości docelowej kernel_abi w Kleaf.

Przygotuj moduły w drzewie do wyodrębnienia symboli

Aby przygotować moduły w drzewie do wyodrębniania symboli, wymień w drzewie listę konkretnego dostawcy. modułów w atrybucie module_outs celu kernel_build. Zobacz _VIRT_COMMON_MODULES oraz sposób korzystania . Nie umieszczaj na tej liście modułów GKI.

Skonfiguruj te moduły tak, aby unsign (bez podpisu), W przeciwnym razie lista symboli może być pusta. Aby to zrobić, dodaj ten wiersz do jądra fragmenty konfiguracji:

# CONFIG_MODULE_SIG_ALL is not set

Zobacz common-modules/virtual-device/virtual_device_core.fragment na przykład.

Dodaj listę symboli urządzeń do kompilacji jądra urządzenia

Dodaj atrybut kmi_symbol_list do miejsca docelowego kernel_build zdefiniowanego w urządzenie BUILD.bazel. Nazwa listy symboli powinna mieć format //common:android/abi_gki_<arch>_<device> Zobacz common-modules/virtual-device/BUILD.bazel, np.:

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,
)

Utwórz i prześlij początkową listę symboli

Utwórz pustą listę symboli w punkcie common/android/abi_gki_<arch>_<device>. W przypadku wartości przykład powyżej polecenia:

touch common/android/abi_gki_aarch64_virtual_device

Dodaj ten plik do additional_kmi_symbol_lists podstawowej kompilacji jądra GKI. Dla: przykładowy adres //common:android/abi_gki_aarch64_virtual_device jest dodawany do sekcji aarch64_additional_kmi_symbol_lists grupa plików zadeklarowana w common/BUILD.bazel.

Zaktualizuj listę symboli urządzeń, aby wypełnić nową listę symboli. i wysyłanie do repozytorium Androida Common Jernel.

Aktualizowanie listy symboli urządzeń

Wszystkie symbole jądra używane przez moduły w module_outs z kernel_build i Na liście symboli należy umieścić symbol kernel_modules z kernel_abi. Może to spowodować można to zrobić, uruchamiając środowisko docelowe kernel_abi z parametrem _update_symbol_list przedrostek. Na przykład następujące polecenie aktualizuje listę symboli dla //common-modules/virtual-device:virtual_device_aarch64:

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

Wyślij aktualizację listy symboli na potwierdzenie

Wyślij poprawkę ze zmianą listy symboli na Popularne na Androidzie Jądro do funkcji nowych symboli w KMI.

Komunikat zatwierdzenia powinien zawierać listę dodanych lub usuniętych symboli. Dostępne opcje wpisz tę listę ręcznie w celu aktualizacji listy symboli lub użyj $DIST_DIR/abi.report.short raport po uaktualnianie referencyjnego interfejsu ABI reprezentację.

Podczas aktualizacji referencyjnego interfejsu ABI reprezentacja przed wysłaniem aktualizacji listy symboli nie jest wymagana, może spowodować usunięcie dodatkowych przed przesłaniem i przyspieszyć jej przesłanie. W każdym razie jest to sprawdzić i zaktualizować w razie potrzeby podczas wstępnego przesyłania.

Starsze wersje (Android 12 i starsze)

Użyj narzędzia build_abi.sh w ten sposób:

BUILD_CONFIG=path/to/build.config.device build/build_abi.sh --update-symbol-list

W tym przykładzie build.config.device musi zawierać te opcje konfiguracji:

  • vmlinux

    Musi znajdować się na liście FILES. Może to zrobić, dodając build.config.aarch64

  • KMI_SYMBOL_LIST

    Aby zaktualizować, należy ustawić listę symboli KMI i wskazać ją.

Po zaktualizowaniu listy symboli urządzeń musisz również odzwierciedlić te zmiany w kompilacja GKI (common/build.config.gki.aarch64):

  • Skopiuj zaktualizowaną listę symboli do folderu common/android/abi_gki_aarch64_<device>.

  • Sprawdź, czy usługa android/abi_gki_aarch64_<device> jest uwzględniona w ADDITIONAL_KMI_SYMBOL_LISTS w: common/build.config.gki.aarch64.

  • Aktualizacja listy symboli do opcji POTWIERDZENIE.