Подробный гайд: Инструменты компиляции для сборки ядра 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) без ошибок зависимостей.