Этот документ содержит часто задаваемые вопросы о ядре 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 без изменений, поэтому 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 придерживается стандартного соглашения upstream, поэтому инструменты поставщиков или соглашения об именовании модулей должны учитывать это следование.
Как включить debugfs для внутреннего использования?
Подробную информацию о включении debugfs см. в разделе навязчивые функции отладки нисходящего потока .
Как устранить несоответствие ABI между ядром GKI и включенной определенной конфигурацией модуля?
Несоответствие ABI между ядром GKI и конфигурацией модуля представляет собой неявную зависимость конфигурации модуля, при которой включение модуля приводит к интеграции двоичного файла конфигурации в результирующий образ ядра. Обратитесь к команде разработчиков ядра Android ( kernel-team@android.com ), чтобы определить дальнейший путь. После определения списка символов создайте сообщение об ошибке в системе отслеживания ошибок и загрузите изменение в список символов.