Подробный гайд: Инструменты компиляции для сборки ядра Linux

Полный список инструментов для сборки ядра Linux: компиляторы, Kbuild, библиотеки? пакеты для дистрибутивов. Гайд по установке, настройке, ускорению компиляции.

2026.04.24                  


Подробный гайд: Инструменты компиляции для сборки ядра LinuxПодробный гайд: Инструменты компиляции для сборки ядра Linux Сборка ядра Linux требует набора инструментов, который в большинстве дистрибутивов устанавливается одной командой, но при работе с минимальными окружениями, кросс-компиляцией или специфичными конфигурациями важно знать полный перечень зависимостей.

Официальный источник:

В дереве исходников ядра всегда есть актуальный список требований:
  • Documentation/process/changes.rst (или Documentation/admin-guide/changes.rst в новых версиях).

1. Базовый обязательный набор

Инструмент Назначение Пакет(ы)
gcc Основной компилятор C gcc, gcc-multilib (для 32-бит совместимости)
binutils Линкер ld, ассемблер as, objcopy, strip, ar binutils, binutils-dev
make Система сборки ядра (Kbuild) make, make-guile (иногда)
flex Лексический анализатор для Kconfig flex
bison Генератор парсеров для Kconfig bison
libncurses-dev / ncurses-devel Псевдографический конфигуратор menuconfig libncurses5-dev, libncursesw5-dev или ncurses-devel
bc Калькулятор с произвольной точностью (используется в Makefile) bc
openssl / libssl-dev Подпись модулей, генерация сертификатов openssl, libssl-dev или openssl-devel
perl Вспомогательные скрипты сборки perl
python3 + python3-dev Скрипты Kbuild, BPF, CO-RE, генерация заголовков python3, python3-dev

2. Зависимости для современных функций ядра (6.x+)

Инструмент Зачем нужен Пакет
libelf-dev / elfutils-libelf-devel Разбор ELF, поддержка BPF, kprobe, livepatch libelf-dev или elfutils-libelf-devel
dwarves (pahole) Генерация BTF-информации для BPF и отладки dwarves (или pahole)
pkg-config / pkgconf Поиск библиотек и заголовков при конфигурации pkg-config или pkgconf
kmod Управление модулями (modprobe, lsmod и др.) kmod
tar, gzip, bzip2, xz, zstd Распаковка исходников и создание пакетов tar, gzip, bzip2, xz-utils, zstd
fakeroot Сборка .deb/.rpm без прав root fakeroot

3. Опциональные, но крайне рекомендуемые

Инструмент Назначение
ccache Кеширование объектных файлов → ускорение повторных сборок на 3–10×
clang + llvm + lld Альтернативная тулчейн-цепочка (поддерживается ядром с 5.0+, рекомендуется для BPF и sanitizers)
distcc / icecream Распределённая сборка по сети
sparse Статический анализатор кода ядра (make C=1)
pahole >= 1.21 Обязательно для BTF в ядрах 5.15+
flex/bison (современные версии) Требуются для новых синтаксических конструкций Kconfig

4. Установка по дистрибутивам

Ubuntu / Debian

sudo apt update
sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev \
                 bc python3-dev pkg-config fakeroot ccache dwarves kmod zstd \
                 libudev-dev libmount-dev libblkid-dev

build-essential уже включает gcc, make, binutils, libc6-dev.

Fedora / RHEL / Rocky / AlmaLinux

sudo dnf groupinstall "Development Tools" "C Development Tools and Libraries"
sudo dnf install ncurses-devel bison flex openssl-devel elfutils-libelf-devel \
                 bc python3-devel pkgconf-pkg-config fakeroot ccache dwarves \
                 kmod zstd libudev-devel libmount-devel libblkid-devel

Arch Linux / Manjaro

sudo pacman -S base-devel ncurses bison flex openssl libelf bc python pkgconf \
               fakeroot ccache pahole kmod zstd systemd-libs util-linux-libs

base-devel покрывает gcc, make, binutils, pkgconf, fakeroot.

openSUSE

sudo zypper install -t pattern devel_C_C++ devel_kernel
sudo zypper install bc python3-devel pkg-config ccache dwarves kmod zstd \
                    libopenssl-devel libelf-devel flex bison ncurses-devel

5. Проверка установки

Перейдите в распакованные исходники ядра и выполните:

gcc --version
make --version
ld -v
flex --version
bison --version
bc --version
python3 --version
pahole --version   # должен быть ≥ 1.21 для BTF

Запустите тестовую конфигурацию:

make defconfig      # создаёт .config под текущую архитектуру
make menuconfig     # проверяет работу ncurses/kconfig

Если ошибок нет → тулчейн готов.


6. Советы по сборке

Задача Команда / Настройка
Многопоточная сборка make -j$(nproc) или make -j$(nproc) LLVM=1 (для Clang)
Включить ccache export CC="ccache gcc" перед make
Сборка с Clang/LLVM make LLVM=1 LLVM_IAS=1 -j$(nproc)
Создание deb-пакетов make bindeb-pkg -j$(nproc)
Создание rpm-пакетов make binrpm-pkg -j$(nproc)
Кросс-компиляция (ARM64) make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
Очистка перед новой сборкой make mrproper (удаляет .config и все артефакты)
Быстрая пересборка модулей make modules -j$(nproc)

Никогда не запускайте make от root. Сборка ядра не требует прав суперпользователя. Установка (make modules_install, make install) требует sudo.


7. Диагностика типичных ошибок

Ошибка Причина Решение
Makefile:xxx: *** missing separator. Неправильный make или повреждённый архив Перепроверьте версию make, распакуйте заново
scripts/kconfig/lxdialog/dialog.h:38: fatal error: curses.h: No such file Не установлен ncurses-dev sudo apt install libncurses5-dev libncursesw5-dev
error: pahole version ... is too old Старый dwarves Установите из backports или соберите dwarves ≥ 1.21
fatal error: openssl/opensslv.h: No such file Нет заголовков OpenSSL libssl-dev / openssl-devel
scripts/Makefile.build:xxx: recipe for target '.../bpf' failed Отсутствует libelf-dev или python3-dev Установите соответствующие -dev пакеты

Итоговый чек-лист

  • [ ] Компилятор (gcc или clang + llvm)
  • [ ] Binutils (ld, as, objcopy)
  • [ ] GNU Make
  • [ ] flex, bison, bc
  • [ ] libncurses-dev (или эквивалент)
  • [ ] libssl-dev, libelf-dev / elfutils-libelf-devel
  • [ ] python3-dev, perl, pkg-config
  • [ ] dwarves (pahole ≥ 1.21)
  • [ ] ccache (опционально, но настоятельно рекомендуется)
  • [ ] Архиваторы: tar, xz, zstd

После установки этих пакетов вы сможете собирать ядро любой ветки (5.10, 6.1, 6.6, 6.12, mainline) без ошибок зависимостей.


Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта