На этой странице описано, как настроить новую функцию ядра в качестве модуля GKI или настроить существующую встроенную функцию ядра в качестве модуля GKI.
Настройте новую функцию как модуль GKI.
Для использования новой функции отредактируйте
gki_defconfigи измените значение параметра конфигурации необходимой функции ядра сnнаm(=m). Установите этот параметр как вarch/arm64/configs/gki_defconfigтак и вarch/x86/configs/gki_defconfig.Добавьте файлы KO (
.ko), сгенерированные для данной функции, в раздел_COMMON_GKI_MODULES_LISTследующего файла. Добавляйте файлы в отсортированном порядке. Если вы не уверены во всех сгенерированных файлах, сборка завершится с ошибкой, и будет перечислен список всех необходимых файлов KO, которые следует добавить в список.- В
android17-6.18и выше добавьте элементы в файлcommon/bazel/modules_private.bzl. - В
android16-6.12и более ранних версиях добавьте элементы в файлcommon/modules.bzl.
- В
Для Android 14 добавьте тот же набор KO-файлов из шага 2, отсортированных в порядке возрастания для поиска бинарных файлов во время выполнения, в папку
common/android/gki_{ARCH}_protected_modules, чтобы обозначить модуль как защищенный модуль GKI.Для Android 14 и 15 обновите список экспортируемых параметров, чтобы он включал недавно добавленные параметры в
common/android/abi_gki_protected_exports_ ARCHITECTURE. Например, чтобы обновить список, выполнитеtools/bazel run //common:kernel_aarch64_abi_update_protected_exportsforaarch64.Убедитесь, что новые файлы KO, добавленные на шаге 2, скопированы в папки ядра
out/<androidX-YZ>/dist/system_dlkm.imgиout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz. Модули из архиваsystem_dlkm_staging_archive.tar.gzможно использовать в качестве входных данных для генерации файлаsystem_dlkm.imgпри сборке платформы.Отправьте свои изменения на проверку. Модули GKI — это функция ядра, доступная только для Android, поэтому патчи для преобразования модулей не обязательно отправлять в основной репозиторий. Однако для отправки патчей Android Common Kernel (ACK) необходимо следовать другим рекомендациям.
Настройте встроенную функцию ядра как модуль GKI.
Для уже существующей встроенной функции ядра отредактируйте файл
gki_defconfigи измените значение параметра конфигурации необходимой функции ядра сyнаm(=m). Установите этот параметр как вarch/arm64/configs/gki_defconfig, так и вarch/x86/configs/gki_defconfig.Добавьте файлы KO (
.ko), сгенерированные для данной функции, в раздел_COMMON_GKI_MODULES_LISTследующего файла. Добавляйте файлы в отсортированном порядке. Если вы не уверены во всех сгенерированных файлах, сборка завершится с ошибкой, и будет перечислен список всех необходимых файлов KO, которые следует добавить в список.- В
android17-6.18и выше добавьте элементы в файлcommon/bazel/modules_private.bzl. - В
android16-6.12и более ранних версиях добавьте элементы в файл `common/modules.bzl.`.
- В
Для Android 14 добавьте тот же набор KO-файлов из шага 2, отсортированных в порядке возрастания для поиска бинарных файлов во время выполнения, в папку
common/android/gki_{ARCH}_protected_modules, чтобы обозначить модуль как защищенный модуль GKI.Для Android 14 и 15 обновите список защищенных экспортов, включив в него экспорты из недавно добавленного модуля в
common/android/abi_gki_protected_exports_{ARCH}используяtools/bazel run //common:kernel_aarch64_abi_update_protected_exportsforaarch64.Убедитесь, что новые файлы KO модулей, преобразованные на шаге 2, скопированы в папки ядра
out/<androidX-YZ>/dist/system_dlkm.imgиout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz. Модули из архиваsystem_dlkm_staging_archive.tar.gzможно использовать в качестве входных данных для генерации файлаsystem_dlkm.imgпри сборке платформы.Отправьте свои изменения на проверку. Модули GKI — это функция ядра, доступная только для Android, поэтому патчи для преобразования модулей не обязательно отправлять в основную ветку. Однако для отправки патчей Android Common Kernel (ACK) необходимо следовать другим рекомендациям.
Преобразовать защищенный модуль GKI в незащищенный.
Для Android 15 и выше добавьте модуль, который преобразуется из защищенного в незащищенный, в список
_COMMON_UNPROTECTED_MODULES_LISTв следующем файле:- В
android17-6.18и выше добавьте элементы в файлcommon/bazel/modules_private.bzl. - В
android16-6.12и более ранних версиях добавьте элементы в файлcommon/modules.bzl.
- В
Для Android 14 удалите модуль, который преобразуется из защищенного в незащищенный, из списка защищенных модулей в файле
common/android/gki_protected_modules.Для Android 14 и 15 обновите список защищенных экспортов, исключив из него экспорты из недавно преобразованного незащищенного модуля в
common/android/abi_gki_protected_exports_{ARCH}используяtools/bazel run //common:kernel_aarch64_abi_update_protected_exportsforaarch64.Отправьте свои изменения на проверку. Модули GKI — это функция ядра, доступная только для Android, поэтому патчи для преобразования модулей не обязательно отправлять в основную ветку. Однако для отправки патчей Android Common Kernel (ACK) необходимо следовать другим рекомендациям.
Краткое руководство по устранению нарушений символики в модулях GKI
Когда неподписанные модули нарушают защиту символов, применяемую к модулям GKI, при загрузке модуля могут возникать два типа ошибок, приводящие к сбою.
1. Неподписанный модуль, использующий защищенный символ.
Ошибка:
module: Protected symbol: some_kernel_function (err -13)
Причина:
Файл module.ko представляет собой неподписанный модуль поставщика и пытается разрешить экспортируемый символ модуля GKI some_kernel_function во время загрузки, не будучи включенным в список символов поставщика.
Разрешение:
Если module.ko не является защищенным модулем GKI, обновление списка символов устраняет ошибку, добавляя some_kernel_function в список символов поставщика. В качестве альтернативы используйте версию module.ko , относящуюся к GKI.
2. Неподписанный модуль, экспортирующий защищенный символ.
Ошибка:
module: exports protected symbol some_kernel_function
Причина:
Модуль, экспортирующий some_kernel_function является защищенным модулем GKI, а module.ko вероятно, представляет собой неподписанную пользовательскую версию этого модуля. Когда module.ko пытается экспортировать some_kernel_function , которая может быть экспортирована только подписанным модулем GKI, загрузка завершается с ошибкой, о чем свидетельствует следующее сообщение.
Разрешение:
Это можно исправить, используя версию модуля GKI, которая экспортирует some_kernel_function , если неподписанный модуль является пользовательской версией.