Как быстро собрать ядро Android и подключить модули

Иван Корнев·18.03.2026·2 мин

Краткий ответ: подготовьте Linux‑окружение, скачайте подходящий исходник ядра, скопируйте или создайте defconfig для вашего SoC, соберите ядро через Clang/GCC, затем скомпилируйте .ko модули и установите их в /system/lib/modules или в boot.img. Ниже — пошаговая инструкция с практическими командами.

Подготовка окружения и требования

Минимум: Ubuntu 22.04 (или другая LTS), 8+ ядер CPU, 16 ГБ RAM, ~100 ГБ свободного диска. Установите зависимости:

sudo apt update
sudo apt install git-core gnupg flex bison build-essential zip curl zlib1g-dev \
gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev \
libxml2-utils xsltproc unzip fontconfig python3 openjdk-11-jdk

Зарегистрируйте GPG‑ключи AOSP, если используете AOSP‑репозитории:

gpg --keyserver keyserver.ubuntu.com --recv-keys 8CB30BEA831E1B06
gpg -a --export 8CB30BEA831E1B06 | sudo apt-key add -

Отдельный раздел под /android упростит работу: исходники ~20–50 ГБ, объектные файлы ~30+ ГБ.

Скачивание исходников и выбор ветки

Определите ветку под ваше устройство (GKI для универсального, vendor/производитель/lineage для кастомов). Пример GKI:

mkdir -p ~/android/kernel && cd ~/android/kernel
git clone https://android.googlesource.com/kernel/common -b android-mainline
cd common

Для конкретного устройства найдите defconfig в arch/arm64/configs/ (например, exynos*_defconfig) и используйте его как отправную точку.

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

Создайте выходной каталог и загрузите конфигурацию:

make O=out ARCH=arm64 mydevice_defconfig
make O=out ARCH=arm64 menuconfig

Обязательные опции для модулей и Android:

  • CONFIG_MODULES=y
  • CONFIG_ANDROID_BINDER_IPC=y (если нужно)
  • Включайте опции осознанно — читайте описания.

Не меняйте опции вслепую — неверный config часто приводит к bootloop.

Сохраните конфигурацию. Для автоматической модификации можно использовать scripts/config.

Сборка ядра

Рекомендуется Clang для современных Android‑ядр:

export PATH=/path/to/clang/bin:$PATH
make O=out ARCH=arm64 -j$(nproc)

Результат: out/arch/arm64/boot/Image.gz-dtb (или Image) и модули в out/lib/modules. Логи собираются в out/build.log — ищите ошибки:

grep -i error out/build.log || true

Если OOM — уменьшите параллельность: -j4.

Компиляция и упаковка модулей

Чтобы собрать конкретные модули:

make O=out ARCH=arm64 M=drivers/net/wireless modules -j$(nproc)

Скопируйте .ko на устройство (нужен root или TWRP):

  • Для старых устройств: /system/lib/modules/
  • Для современных — включите модули в boot.img или используйте Magisk модуль (если нужно загружать до init).

Загрузка модуля на устройстве:

su
insmod /system/lib/modules/your_module.ko
# или modprobe если доступен

Для упаковки в boot.img используйте Android Image Kitchen или формируйте ramdisk с init.rc, который подгружает модули.

Установка ядра на устройство и проверка

Разблокируйте загрузчик, затем прошейте boot.img:

fastboot flash boot new-boot.img
fastboot reboot

Проверка:

adb shell uname -r
adb shell dmesg | grep -i error

Первая загрузка с новым ядром может занять больше времени — дождитесь полного запуска.

Частые ошибки

  • "No rule to make target" — неверный путь или defconfig; проверьте ARCH и O.
  • Bootloop — откатитесь к стоковому образу или используйте AnyKernel шаблон для безопасной установки.
  • Модули не загружаются — несоответствие версий (uname -r) или отсутствует EXPORT_SYMBOL для зависимостей.
  • OOM при сборке — уменьшите параллелизм или добавьте swap.

FAQ

  • Как узнать правильный defconfig для устройства? — Ищите в arch/arm64/configs или в репозитории производителя/LineageOS для вашего SoC.
  • Нужен ли root? — Да, для копирования модулей в /system или для установки через init требуется root/TWRP.
  • Как вернуть сток? — Прошейте стоковый boot/partition через fastboot/Odin/MiFlash согласно производителю.

Если хотите, могу сгенерировать список команд для вашего конкретного устройства (SoC и ROM) — пришлите модель и используемую ветку ядра.