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

Как включить debugfs для внутреннего использования?

Дополнительные сведения о включении debugfs см. в разделе встроенные нижестоящие функции отладки .

Как я могу устранить несоответствие ABI между ядром GKI с включенной конфигурацией определенного модуля?

Несоответствие ABI между ядром GKI и конфигурацией модуля представляет собой неявную зависимость конфигурации модуля, когда включение модуля вызывает встраивание двоичной конфигурации в результирующий образ ядра. Свяжитесь с командой разработчиков ядра Android ( kernel-team@android.com ), чтобы определить дальнейшие действия. После того, как список символов определен, создайте ошибку в системе отслеживания ошибок и загрузите изменение в список символов.