Конфигурация ядра

Используйте следующие параметры конфигурации в качестве основы для конфигурации ядра Android. Настройки организованы в .cfg файлы для android-base , android-base- ARCH и android-recommended :

  • android-base опции позволяют основные функции Android и должны быть настроены как указано всеми устройствами.
  • android-base- ARCH - ARCH android-base- ARCH опции позволяют основные функции Android и должны быть настроены как указано всеми устройствами архитектуры ARCH . Не все архитектуры имеют соответствующий файл требуемых опций для конкретной архитектуры. Если в вашей архитектуре нет файла, значит, у нее нет дополнительных архитектурно-зависимых требований к конфигурации ядра Android.
  • android-recommended . Эти параметры включают расширенные функции Android и являются необязательными для устройств.

Эти конфигурационные файлы расположены в kernel/configs репо. Используйте набор файлов конфигурации, соответствующий используемой вами версии ядра.

Для получения дополнительной информации о контрольных уже предпринятых для укрепления ядра на устройствах, см системы и ядро безопасности . Для получения дополнительной информации о необходимых настройках см Определение документа Android Compatibility (CDD) .

Создание конфигурации ядра

Для устройств , которые имеют минималистский defconfig формат, используйте merge_config.sh сценарий в дереве ядра , чтобы включить опции:

ARCH=ARCH scripts/kconfig/merge_config.sh <...>/device_defconfig <...>/android-base.cfg <...>/android-base-ARCH.cfg <...>/android-recommended.cfg

Это создает .config файл , который вы можете использовать , чтобы сохранить новый defconfig файл или скомпилировать новое ядро с включенными функциями Android.

Дополнительные требования к конфигурации ядра

В некоторых случаях сопровождающий платформы может выбрать одну из нескольких функций ядра для удовлетворения зависимости Android. Такие зависимости не могут быть выражены в файлах фрагментов конфигурации ядра (описанных выше), поскольку формат этих файлов не поддерживает логические выражения. В Android 9 и выше, Compatibility Test Suite (CTS) и Vendor Test Suite (VTS) убедитесь , что следующие требования удовлетворены:

  • CONFIG_OF=y или CONFIG_ACPI=y
  • 4.4 и 4.9 ядра имеют CONFIG_ANDROID_LOW_MEMORY_KILLER=y ИЛИ имеют как CONFIG_MEMCG=y и CONFIG_MEMCG_SWAP=y
  • CONFIG_DEBUG_RODATA=y или CONFIG_STRICT_KERNEL_RWX=y
  • CONFIG_DEBUG_SET_MODULE_RONX=y или CONFIG_STRICT_MODULE_RWX=y
  • Для ARM64 только: CONFIG_ARM64_SW_TTBR0_PAN=y или CONFIG_ARM64_PAN=y

Кроме того, CONFIG_INET_UDP_DIAG параметр должен быть установлен y 4,9 ядер в Android 9 и выше.

Включение параметров режима USB-хоста

Для аудио в режиме хоста USB включите следующие параметры:

CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=y
# CONFIG_USB_AUDIO is for a peripheral mode (gadget) driver

Для режима USB-хоста MIDI включите следующую опцию:

CONFIG_SND_USB_MIDI=y

Seccomp BPF с TSYNC

Безопасные вычисления Berkeley Packet Filter (Seccomp BPF) - это технология безопасности ядра, которая позволяет создавать песочницы, определяющие контекст, в котором процесс может выполнять системные вызовы. Функция синхронизации потоков (TSYNC) позволяет использовать Seccomp BPF из многопоточных программ. Эта возможность ограничена архитектурами, имеющими поддержку Seccomp в восходящем направлении (ARM, ARM64, x86 и x86_64).

Демон Android Live-Lock

Android 10 включает в себя Android Live-блокировка Daemon ( llkd ), который предназначен для захвата и смягчать ядра ТУПИКИ. Для получения дополнительной информации об использовании llkd , обратитесь к Android Live-Лок Daemon .

Использование vDSO32 на ARM64

Виртуальный динамический общий объект (vDSO) - это альтернатива системным вызовам, которые при правильном использовании и настройке могут снизить затраты на цикл. В Android 10 добавлена ​​поддержка vDSO32 в 64-битных ядрах (Android уже поддерживает vDSO64 в 64-битных ядрах и vDSO32 в 32-битных ядрах). Используя vDSO32 ( CONFIG_VDSO_COMPAT ) на архитектуре ARM64 обеспечивает увеличение на 0,4 процента в сроке службы батарей и других улучшений производительности.

Linux сообщество активно работает над унифицировать vDSOs по архитектуре . Вы можете настроить vDSO в ядре Linux, позволяя vDSO32 с CONFIG_COMPAT и CONFIG_CROSS_COMPILE_COMPAT_VDSO с тройкой arm32 компилятором. Команда Android Кернел портированном старые версии серии патча vDSO в устройства пиксельных, так что вы можете найти примеры в Pixel сборки ядра ( LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN пути, CROSS_COMPILE_ARM32 ссылки и CONFIG_CROSS_COMPILE_ARM32 конфигурация).