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ącbuild.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 wADDITIONAL_KMI_SYMBOL_LISTS
w:common/build.config.gki.aarch64
.