На этой странице описано, как настроить новую функцию ядра как модуль GKI или настроить существующую встроенную функцию ядра как модуль GKI.
Настройте новую функцию как модуль GKI.
Для новой функции отредактируйте
gki_defconfig
и установите элемент конфигурации требуемой функции ядра сn
наm
(=m
). Установите этот параметр как вarch/arm64/configs/gki_defconfig
так и вarch/x86/configs/gki_defconfig
.Добавьте файлы KO (
.ko
), созданные для этой функции, в разделCOMMON_GKI_MODULES_LIST
файлаcommon/modules.bzl
. Добавьте файлы в отсортированном порядке. Если вы не уверены во всех сгенерированных файлах, сборка завершится неудачей и в список будут добавлены все необходимые файлы KO.Добавьте тот же набор файлов KO из шага 2, отсортированных в порядке возрастания для двоичного поиска во время выполнения, в
common/android/gki_{ARCH}_protected_modules
чтобы обозначить модуль как защищенный модуль GKI. Обновите список защищенных экспортов, включив в него экспорт из недавно добавленного модуля вcommon/android/abi_gki_protected_exports_{ARCH}
с помощьюtools/bazel run //common:kernel_aarch64_abi_update_protected_exports
foraarch64
. Модули, обозначенные как защищенные модули GKI, по-прежнему должны быть одобрены Google как официальные защищенные модули.Убедитесь, что вновь добавленные файлы 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
файлаcommon/modules.bzl
. Добавьте файлы в отсортированном порядке. Если вы не уверены во всех сгенерированных файлах, сборка завершится неудачей и в список будут добавлены все необходимые файлы KO.Добавьте тот же набор файлов KO из шага 2, отсортированных в порядке возрастания для двоичного поиска во время выполнения, в
common/android/gki_{ARCH}_protected_modules
чтобы обозначить модуль как защищенный модуль GKI. Обновите список защищенных экспортов, включив в него экспорт из недавно добавленного модуля вcommon/android/abi_gki_protected_exports_{ARCH}
с помощьюtools/bazel run //common:kernel_aarch64_abi_update_protected_exports
foraarch64
. Модули, обозначенные как защищенные модули GKI, по-прежнему должны быть одобрены Google как официальные защищенные модули.Убедитесь, что вновь преобразованные файлы 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 в незащищенный
Удалите модуль, преобразуемый из защищенного в незащищенный, из списка защищенных модулей в
common/android/gki_protected_modules
.Обновите список защищенных экспортов, чтобы исключить их из недавно преобразованного незащищенного модуля в
common/android/abi_gki_protected_exports_{ARCH}
с помощьюtools/bazel run //common:kernel_aarch64_abi_update_protected_exports
foraarch64
.Отправьте изменения на проверку. Модули 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
, если неподписанный модуль является пользовательской версией.