Сборка ядра Linux под свое железо: полное руководство

Загрузка системы занимает лишние секунды, а модуль Wi-Fi-адаптера так и не подхватывается дистрибутивным ядром — типичные признаки того, что стандартное ядро собрано «подо всё сразу» и тащит с собой сотни ненужных драйверов. Сборка ядра Linux под свое железо решает обе проблемы: в образ попадают только те модули, которые реально нужны вашему процессору, чипсету и периферии.

Эта инструкция описывает процесс от получения исходников до установки готового ядра. Команды приведены в общем виде и работают в большинстве дистрибутивов, однако названия пакетов могут отличаться — сверяйтесь с документацией вашей системы. Перед началом убедитесь, что у вас есть права root и достаточно свободного места на диске: исходники и объектные файлы занимают несколько гигабайт.

Зачем собирать ядро самостоятельно

Дистрибутивное ядро — это компромисс. Оно должно запускаться на любом совместимом оборудовании, поэтому включает тысячи драйверов, файловых систем и подсистем, которые конкретно вам никогда не понадобятся. Собственная сборка позволяет убрать лишнее и добавить нужное.

  • ⚡ Ускорение загрузки за счет отказа от подгрузки ненужных модулей
  • 🔧 Поддержка нового железа, которого еще нет в ядре дистрибутива
  • 🛡️ Включение дополнительных механизмов безопасности и отключение уязвимых подсистем
  • 📦 Уменьшение размера ядра и потребления оперативной памяти
  • 🧪 Возможность применять сторонние патчи и экспериментальные функции

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

Подготовка системы и установка инструментов

Для компиляции потребуется набор инструментов разработки. В дистрибутивах на базе Debian и Ubuntu пакеты ставятся одной командой:

sudo apt install build-essential bc libncurses-dev flex bison libssl-dev libelf-dev dwarves

В Fedora и родственных системах набор аналогичен, но имена пакетов отличаются — используйте dnf groupinstall "Development Tools" и документацию вашего дистрибутива. Обратите внимание на пакет libssl-dev: без него сборка прервется с ошибкой при подписании модулей.

⚠️ Внимание: перед сборкой убедитесь, что на разделе, где будет происходить компиляция, свободно не менее 15–20 ГБ. Переполнение диска в середине процесса оставит дерево исходников в поврежденном состоянии, и начинать придется заново.

Дополнительно проверьте версию компилятора командой gcc --version. Слишком старый GCC может не поддерживать свежие версии ядра — требования указаны в файле Documentation/process/changes.rst в дереве исходников.

Получение исходников ядра

Официальные исходники публикуются на kernel.org в виде архивов и git-репозитория. Для разовой сборки проще скачать архив нужной версии:

wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.X.Y.tar.xz

tar -xf linux-6.X.Y.tar.xz

cd linux-6.X.Y

Выбирая версию, ориентируйтесь на ветки longterm (LTS) — они получают исправления дольше остальных. Самая свежая стабильная версия может содержать регрессии, которые еще не успели отловить. Подпись архива можно проверить через GPG, чтобы убедиться в подлинности исходников.

Ветка ядраНазначениеКому подходит
mainlineНовейший код, активная разработкаРазработчики, тестировщики
stableСтабильные релизы с исправлениямиЭнтузиасты, новое железо
longterm (LTS)Длительная поддержка, консервативные обновленияСерверы, рабочие машины
Ядро дистрибутиваСобрано мейнтейнерами, автообновленияБольшинство пользователей
📊 Зачем вам собственная сборка ядра?
Поддержка нового железа
Ускорение загрузки системы
Обучение и эксперименты
Серверные задачи и безопасность

Настройка конфигурации под свое железо

Конфигурация — самый ответственный этап. Ошибка здесь означает, что система не увидит диск, сетевую карту или не сможет смонтировать корневой раздел. Начинать с нуля не нужно: возьмите за основу конфиг текущего рабочего ядра.

cp /boot/config-$(uname -r) .config

make olddefconfig

Команда make olddefconfig подставит значения по умолчанию для опций, появившихся в новой версии. Далее запустите make menuconfig — текстовый интерфейс с деревом настроек, где можно искать опции клавишей «/».

Главный принцип тонкой настройки: драйверы вашего железа вкомпилируйте в ядро статически ([*]), а все сомнительное отключайте или оставляйте модулями ([M]). Узнать, какие модули реально используются, помогут команды lsmod и lspci -k. Последняя показывает, какой драйвер обслуживает каждое устройство PCI.

  • 🖥️ Включите поддержку вашего процессора в разделе Processor type and features
  • 💾 Проверьте драйверы контроллера дисков (AHCI, NVMe) и файловой системы корневого раздела
  • 🌐 Убедитесь, что сетевой адаптер поддерживается — иначе первая загрузка останется без сети
  • 🎮 Для дискретной видеокарты решите заранее: свободный драйвер в ядре или проприетарный модуль

☑️ Проверка конфигурации перед сборкой

Выполнено: 0 / 5
⚠️ Внимание: если корневая файловая система или драйвер диска собраны модулем, а initramfs вы не используете, ядро упадет в панику с ошибкой unable to mount root fs. Либо вкомпилируйте эти компоненты статически, либо корректно сгенерируйте initramfs.
Что такое localmodconfig и когда его применять

Команда make localmodconfig анализирует модули, загруженные в системе прямо сейчас, и отключает все остальные. Это быстрый способ получить минимальную конфигурацию, но есть риск: устройства, не подключенные в момент анализа (например, USB-флешка или кардридер), потеряют поддержку. Перед запуском подключите всю периферию, которой пользуетесь.

Компиляция ядра

Сама сборка запускается одной командой, но занимает от десятков минут до нескольких часов в зависимости от процессора. Ключ -j задает число параллельных потоков — обычно ставят по количеству ядер CPU:

make -j$(nproc)

Если сборка прервалась с ошибкой, читайте первое сообщение об ошибке, а не последнее — именно оно указывает на причину. Чаще всего виноваты отсутствующие зависимости или конфликт включенных опций. После исправления повторный запуск make продолжит с места остановки, пересобирать всё не придется.

В дистрибутивах на базе Debian есть альтернативный путь — сборка через make bindeb-pkg. На выходе получится обычный .deb-пакет, который легко установить и так же легко удалить через dpkg. Это удобнее ручной установки и снижает риск захламления системы.

Установка ядра и настройка загрузчика

После успешной компиляции установите модули и само ядро:

sudo make modules_install

sudo make install

Команда make install копирует ядро в /boot и в большинстве случаев обновляет конфигурацию GRUB автоматически. Если пункт меню не появился, выполните sudo update-grub или эквивалентную команду вашего загрузчика. При использовании initramfs убедитесь, что он сгенерирован для новой версии — в Debian-подобных системах это делает update-initramfs.

⚠️ Внимание: не удаляйте старое рабочее ядро до тех пор, пока новое не пройдет проверку в реальной работе. Оставьте в меню загрузчика хотя бы одну заведомо исправную версию — это ваш путь отката при панике ядра или отсутствии сети.

Перезагрузитесь и выберите новое ядро в меню загрузки. После входа в систему проверьте версию командой uname -r, работоспособность сети, звука и графики. Журнал загрузки смотрите через dmesg — ошибки драйверов видны именно там.

Типичные ошибки и их решение

Чаще всего новички сталкиваются с паникой ядра на этапе монтирования корня. Причина почти всегда одна: драйвер диска или файловой системы собран модулем, а initramfs отсутствует или собран неправильно. Решение — вкомпилировать критичные компоненты статически или пересобрать initramfs.

Вторая частая ситуация — пропавшая сеть после загрузки. Проверьте вывод lspci -k: если рядом с сетевым адаптером нет строки Kernel driver in use, драйвер не включен в конфигурацию. Вернитесь в menuconfig, найдите нужную опцию через поиск и пересоберите ядро.

Третья группа проблем связана с Secure Boot: самосборное ядро без цифровой подписи может быть отклонено прошивкой UEFI. Варианты решения — отключить Secure Boot в настройках прошивки либо подписать ядро собственным ключом и зарегистрировать его через MOK. Конкретная процедура зависит от дистрибутива, поэтому сверяйтесь с его документацией.

Как ускорить повторные сборки

Установите ccache — кэш компилятора, который хранит результаты предыдущих сборок. При небольших изменениях конфигурации повторная компиляция ускоряется в разы, поскольку пересобираются только изменившиеся файлы. Достаточно добавить ccache в начало переменной PATH или собирать командой make CC="ccache gcc".

Часто задаваемые вопросы

Можно ли собрать ядро без прав root?

Компиляция возможна от обычного пользователя — это даже рекомендуется с точки зрения безопасности. Права root понадобятся только на этапе установки ядра и модулей в системные каталоги.

Что делать, если новое ядро не загружается?

Перезагрузитесь и выберите в меню загрузчика предыдущую рабочую версию. Затем изучите сообщения об ошибке: чаще всего причина в отсутствующем драйвере диска, файловой системы или некорректном initramfs. Исправьте конфигурацию и пересоберите ядро.

Как узнать, какие модули нужны моему железу?

Используйте связку команд: lspci -k покажет драйверы устройств PCI, lsusb — список USB-устройств, lsmod — загруженные модули. Сопоставив эти данные с опциями в menuconfig, вы включите только необходимое.

Нужно ли пересобирать ядро при каждом обновлении?

Да, самосборное ядро не обновляется автоматически. Следите за выходом исправлений безопасности в выбранной ветке и пересобирайте ядро при появлении критичных патчей. Процесс ускоряется за счет сохраненного .config и ccache.

Удалит ли make mrproper мои настройки?

Да, эта команда очищает дерево исходников полностью, включая файл .config. Перед очисткой скопируйте конфигурацию в безопасное место, например в домашний каталог, чтобы не настраивать всё заново.