Ядро Android: часто задаваемые вопросы

В этом документе собраны часто задаваемые вопросы о ядре 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 ), чтобы определить дальнейшие действия. После определения списка символов создайте сообщение об ошибке в системе отслеживания ошибок и внесите изменения в список символов.