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