В этом документе приведены ответы на часто задаваемые вопросы о ядре Android, также известном как ядро Generic Kernel Image (GKI). Если вы не знакомы с GKI и терминологией ядра GKI, ознакомьтесь с обзором ядра.
Можно ли изменить списки символов интерфейса модуля ядра (KMI) в стабильном ядре?
Изменения, которые не влияют на существующий KMI, можно добавлять в замороженные ядра. В частности, были добавлены новые экспортированные функции и записи в список символов. Подробнее об управлении списками символов…
Можно ли изменить структуры, используемые модулями поставщика в стабильном ядре?
Структуры, входящие в интерфейс KMI, нельзя изменить в ядрах с замороженным KMI. До заморозки KMI эти структуры можно менять.
Можно ли изменить ядро, если это не нарушит совместимость двоичного кода или исходного кода?
Изменения, не влияющие на KMI, можно вносить так, как описано в разделе Исправления для Android.
Как в GKI обрабатывается конфигурация ядра?
Информацию о конфигурации ядра можно найти в разделе Изменения в gki_defconfig.
Как обрабатывать исправления ошибок в исходном коде для перезаписанных существующих модулей GKI?
Если вы создаете модуль поставщика на основе драйвера в общем ядре Android (ACK), то должны самостоятельно переносить исправления ошибок из вышестоящих источников и ACK в свой модуль. Как правило, лучше использовать ядро и модули GKI без изменений, чтобы обновления от Google устанавливались без проблем.
Есть ли тесты, предназначенные специально для GKI?
Тесты Vendor Test Suite (VTS) проверяют, установлена ли сертифицированная сборка GKI, и обеспечивают соблюдение требований GKI для каждого выпуска. Например, в Android 12 есть тесты VTS для заголовка загрузки версии 3 и для проверки наличия необходимых разделов на устройстве с ядром 5.10.
Как создать файл фрагмента defconfig проекта для сборок устройств?
Многие устройства, совместимые с GKI, используют фрагмент конфигурации для описания необходимых параметров конфигурации, помимо gki_defconfig, для создания модулей поставщика.
Примеры, которые являются частью кодовой базы ACK, включают Cuttlefish и DB845c.
Чтобы оптимизировать фрагмент, вам придется вручную изучить варианты конфигурации, но scripts/diffconfig из исходного кода ядра поможет сравнить результаты gki_defconfig и gki_defconfig+device.fragment.
Есть ли обходной путь для modprobe, который обрабатывает - и _ как эквивалентные?
На странице руководства по modprobe приводится следующее описание: "modprobe интеллектуально добавляет или удаляет модуль из ядра Linux. Обратите внимание, что для удобства в названиях модулей нет разницы между символами подчеркивания и дефисами (подчеркивания преобразуются автоматически)". Команда GKI придерживается стандартных правил именования, поэтому при создании инструментов поставщика или модулей необходимо учитывать это.
Как включить debugfs для внутреннего использования?
Подробнее о том, как включить debugfs, рассказывается в разделе intrusive downstream debug features.
Как устранить несоответствие ABI между ядром GKI и определенной конфигурацией модуля?
Несоответствие ABI между ядром GKI и конфигурацией модуля представляет собой неявную зависимость конфигурации модуля, когда включение модуля приводит к встраиванию двоичной конфигурации в результирующий образ ядра. Обратитесь к команде разработчиков ядра Android (kernel-team@android.com), чтобы определить дальнейшие действия. После того как список символов будет определен, создайте ошибку в системе отслеживания ошибок и загрузите изменение в список символов.