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