Гид по технологиям

Как скомпилировать собственное ядро Linux

8 min read Linux Обновлено 29 Mar 2026
Как скомпилировать ядро Linux
Как скомпилировать ядро Linux

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

Вместе с установкой Gentoo, компиляция собственного ядра — одна из тех задач, которые считаются особенно «гиковыми» и технически сложными. Ниже — подробное руководство с объяснениями ключевых понятий, практическими командами, проверками и наборами рекомендаций для разных сценариев.

Что такое ядро

Ядро — это центральная часть операционной системы, которая управляет доступом программ к аппаратуре и обеспечением базовых сервисов (планирование процессов, управление памятью, драйверы устройств, сетевой стек и т. д.). Одно предложение: ядро переводит запросы приложений в реальные действия аппаратуры.

Особенность Linux — модульность и настраиваемость. В отличие от многих других монолитных поставляемых образов, ядро Linux можно собрать под конкретное железо и задачи, включив только нужные компоненты.

Ключевые термины (1‑линейка):

  • Ядро — программный слой между аппаратурой и приложениями.
  • Модуль — загружаемый компонент ядра, реализующий драйвер или подсистему.
  • Компиляция — перевод исходного кода в исполняемый образ (machine code).

Что такое компиляция

Люди пишут программы на языках, понятных человеку (C, Python и т. п.). Компьютеры выполняют машинный код. Компилятор (например, GCC) переводит исходники в машинный код и может оптимизировать результат под конкретную архитектуру (x86_64, ARM и т. п.).

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

Важно: сборка ядра — не только «перекомпиляция», но и выбор конфигурации (что собрать встроенным, что вынести в модуль, какие подсистемы включать).

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

Вы можете получить исходники несколькими способами. Рекомендуется сначала проверить, предоставляет ли ваши дистрибутив собственные «упакованные» исходники — это упростит совместимость и интеграцию с системными инструментами.

На Debian/Ubuntu (и других Debian-подобных) можно установить пакет исходников:

sudo apt-get update
sudo apt-get install linux-source

Файлы исходников ядра в /usr/src

Папка /usr/src/ будет содержать архив (*.tar.bz2). Распакуйте его:

cd /usr/src/
ls
sudo tar xjvf linux-source-4.4.0.tar.bz2

Альтернативный источник — официальный сайт kernel.org. Это удобно, если ваш дистрибутив не предоставляет нужной версии. Скачивайте в отдельную пустую папку, чтобы держать разные версии организованными.

# пример распаковки архива, скачанного с kernel.org
tar xJvf linux-4.9.11.tar.xz

Распаковка архива с исходниками ядра

Содержимое распакованной папки с исходниками

Совет по безопасности: при скачивании с kernel.org проверяйте подпись и контрольную сумму (если доступны), чтобы убедиться в целостности и подлинности исходников.

Подготовка окружения и зависимости

Прежде чем собирать, установите необходимые инструменты. На Debian/Ubuntu это обычно:

sudo apt-get install build-essential gcc libncurses5-dev libssl-dev bc flex bison

libncurses5-dev нужно для интерфейса конфигурации. На других дистрибутивах пакеты будут называться иначе (например, Fedora — ncurses-devel, Red Hat — kernel-devel и т. п.).

Также полезно иметь:

  • make, git (если работаем с git-репой ядра)
  • ccache (ускоряет повторные сборки)
  • fakeroot (в некоторых сценариях упаковки)

Если вы собираете для другой архитектуры, потребуется кросс-компилятор (например, aarch64‑gcc).

Настройка конфигурации ядра

Перейдите в корневую папку исходников:

cd /path/to/linux-source-<версия>

Автоматическая локальная конфигурация

Для удобства можно сгенерировать конфигурацию, основанную на текущей загруженной системе:

sudo make localmodconfig

Эта команда создаст файл .config и отметит для компиляции те компоненты, которые загружены в текущей системе.

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

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

Команда make olddefconfig применит текущую конфигурацию и автоматически установит значения для новых опций по умолчанию.

Если вы экспериментировали и хотите начать сборку «с нуля», выполните:

sudo make clean

Ручная тонкая настройка

Удобные интерфейсы для редактирования .config:

make menuconfig   # текстовое ncurses-меню
make nconfig      # улучшенный ncurses-интерфейс
make xconfig      # Qt‑GUI (нужен X11/Qt)

Пример:

sudo make nconfig

Навигация: стрелки для перемещения, пробел для переключения опций (Y — встроить, M — модуль, N — отключить). В описании опции (F2) можно увидеть пояснение. Сохраняйте изменения через F9 или пункт меню сохранения.

Меню конфигурации ядра nconfig

Обратите внимание на различие между “*” (встроено в образ ядра) и “M” (собрать как модуль). Модули загружаются по требованию и позволяют поддерживать компактный образ ядра.

Описание опции в nconfig

Совет по выбору драйверов

  • Для ноутбуков/десктопов: оставьте поддержку основных контроллеров дисков, SATA, AHCI, файловые системы, ACPI.
  • Для серверов: включите поддержку RAID/NVMe/сетевых карт и драйверов управления питанием, которые требуются.
  • Для встраиваемых систем: максимально уменьшьте набор опций, включив только нужные подсистемы и драйверы.

Если не уверены, собирайте драйверы как модули — это безопаснее: они будут загружены при необходимости.

Компиляция и установка

Когда .config готов, соберите ядро и модули:

# используйте число потоков, равное ядрам/потокам CPU
sudo make -j$(nproc --all)

# установить модули
sudo make modules_install

# установить сам образ ядра
sudo make install

Команда -j$(nproc –all) ускоряет сборку, используя все доступные ядра/потоки. Если система используется для других задач во время сборки, можно указать меньший коэффициент (например, -j2) — это снизит нагрузку и тепловыделение.

После make install установщик обычно копирует vmlinuz-<версия> в /boot, обновляет System.map и initrd (если требуется), но поведение может различаться в зависимости от дистрибутива.

Дополнительно в Debian/Ubuntu после установки ядра может потребоваться обновить initramfs и конфигурацию загрузчика:

# создание initramfs для новой версии (если нужно)
sudo update-initramfs -c -k <версия>

# или обновить весь конфиг GRUB
sudo update-grub

На некоторых системах вместо update-grub используют grub-mkconfig:

sudo grub-mkconfig -o /boot/grub/grub.cfg

Переключение ядер через GRUB и откат

Если после перезагрузки система не стартует из‑за неправильно собранного ядра, GRUB позволяет выбрать старую рабочую версию.

Чтобы убедиться, что меню GRUB видно при старте, отредактируйте файл /etc/default/grub:

sudo nano /etc/default/grub

Найдите строки GRUB_HIDDEN_TIMEOUT и GRUB_HIDDEN_TIMEOUT_QUIET и закомментируйте их, поставив # в начале. Это заставит GRUB показывать меню во время загрузки.

Редактирование /etc/default/grub

После правки примените изменения:

sudo grub-mkconfig -o /boot/grub/grub.cfg

Генерация конфига GRUB

При загрузке выберите пункт “Advanced options” и затем нужную версию ядра для отката.

Совет: пока не будете уверены в новом ядре, не удаляйте старые образы — держите минимум одну рабочую версию для отката.

Тестирование и отладка

После загрузки нового ядра проверьте несколько важных вещей:

# показывает текущую версию ядра
uname -r

# загруженные модули
lsmod

# системный журнал, фильтр по ошибкам
dmesg | grep -i -E "error|fail|warn"

# проверить доступность дисков и файловых систем
lsblk
mount | column -t

Если что-то не работает:

  • Попробуйте загрузиться с предыдущим ядром через GRUB.
  • Зайдите в live-образ, смонтируйте корневую файловую систему, chroot и изучите логи, пересоберите с включённой поддержкой проблемного устройства.
  • Если проблема связана с initramfs, пересоберите его для новой версии ядра.

Проблемы с Secure Boot

На системах с Secure Boot ядро и модули могут требовать подписи. В таких случаях либо отключите Secure Boot в UEFI (если возможно и допустимо), либо подпишите образ и модули и добавьте ключи в MOK (Machine Owner Key) с помощью mokutil. Это отдельная тема, но помните, что неподписанные модули могут блокироваться при включённом Secure Boot.

Критерии приёмки

Перед тем как пометить сборку как “успешную”, проверьте следующее:

  • Система загружается без ошибок в GRUB и переходит в рабочую среду.
  • uname -r показывает ожидаемую версию.
  • Критичные устройства (диск, сеть, GPU/видео, звук) работают.
  • Нет серьёзных ошибок в dmesg и journalctl.
  • Модули, которые вы хотели вынести как M, загружаются автоматически при надобности.

Контрольные списки по ролям

Для разных сценариев полезны разные приоритеты. Короткие чек-листы:

  • Desktop-пользователь:

    • Включены драйверы для графики, звука, Wi‑Fi, Bluetooth, дисков.
    • ACPI и управление питанием настроены.
    • Подпись модуля/Secure Boot проверена.
  • Серверный администратор:

    • Поддержка RAID/NVMe, сетевых стеков и offload настроена.
    • Настроена устойчивость: минимум одна рабочая версия ядра для отката.
    • Логи и мониторинг проходят базовую проверку.
  • Разработчик/встраиваемый инженер:

    • Минимум ненужных подсистем.
    • Поддержка целевой архитектуры и кросс-компилятор настроены.
    • Тесты аппаратуры проходят на стенде.

Когда компиляция ядра нецелесообразна

  • Если вам важна простота и стабильность: дистрибутивные ядра проходят тестирование и снабжены патчами безопасности.
  • Если вы не нуждаетесь в специфических патчах или драйверах — лучше использовать готовые пакеты.
  • Для временной или одноразовой задачи можно использовать kexec или контейнеры вместо перекомпиляции всего ядра.

Альтернативные подходы

  • Использовать ядро дистрибутива и управлять настройками через модули и sysctl.
  • Использовать готовые патчи/пакеты от производителя оборудования (если доступны).
  • Применять livepatch (например, Canonical Livepatch) для исправления уязвимостей без перезагрузки.

Мини‑методология быстрой сборки

  1. Скачайте исходники и установите зависимости.
  2. Склонируйте или скопируйте текущий рабочий конфиг в .config.
  3. Выполните make olddefconfig или make localmodconfig.
  4. Отредактируйте конфиг через make nconfig при необходимости.
  5. Соберите ядро: make -jN; затем make modules_install и make install.
  6. Обновите GRUB/initramfs и перезагрузитесь.
  7. Тестируйте и держите откатную версию ядра.

Шаблон проверки перед новой сборкой

  • Создайте бэкап /boot и списка пакетов.
  • Проверьте свободное место на /boot и / (как минимум несколько сот мегабайт, лучше гигабайт).
  • Запишите текущую версию ядра (uname -r).
  • Сохраните старую .config и System.map.

Примеры команд и полезные сниппеты

Скопировать текущую конфигурацию и подготовить к сборке:

cp /boot/config-$(uname -r) .config
yes '' | make oldconfig   # автоматически принять дефолтные значения для новых опций

Использование ccache для ускорения повторных сборок:

sudo apt-get install ccache
export CC="ccache gcc"
make -j$(nproc --all)

Если собрали ядро без sudo в своей директории исходников, дальнейшие установки (make modules_install / make install) всё равно потребуют прав суперпользователя, чтобы записать файлы в /lib/modules и /boot.

Частые ошибки и рекомендации по их устранению

  • Ошибка “no space left on device” при make install — очистите /boot или увеличьте раздел.
  • Модуль не загружается — проверьте dmesg на сообщения о подписи модулей или отсутствующих символах.
  • Система зависает на init — соберите initramfs заново и убедитесь, что выбран правильный root= в GRUB.

Краткое объявление для команды или сообщества (для рассылки)

Собрал(а) новое кастомное ядро для тестирования. Что было сделано: исходники linux-<версия> скачаны, конфигурация адаптирована к железу, добавлена поддержка <указать>, собраны модули и установлено в /boot. Перед обновлением на рабочих системах — убедитесь, что конфиг GRUB позволяет откатиться к предыдущей версии.

Резюме

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

Важно: всегда сохраняйте рабочую версию ядра и проверяйте загрузку через GRUB перед удалением старых образов.

Ключевые команды и файлы: .config, make localmodconfig, make nconfig, make -jN, make modules_install, make install, update-grub / grub-mkconfig.

Авторские права на изображение: chombosan/Shutterstock

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро