Как скомпилировать собственное ядро 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/ будет содержать архив (*.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 bisonlibncurses5-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 или пункт меню сохранения.

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

Совет по выбору драйверов
- Для ноутбуков/десктопов: оставьте поддержку основных контроллеров дисков, 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 показывать меню во время загрузки.

После правки примените изменения:
sudo grub-mkconfig -o /boot/grub/grub.cfg
При загрузке выберите пункт “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) для исправления уязвимостей без перезагрузки.
Мини‑методология быстрой сборки
- Скачайте исходники и установите зависимости.
- Склонируйте или скопируйте текущий рабочий конфиг в .config.
- Выполните make olddefconfig или make localmodconfig.
- Отредактируйте конфиг через make nconfig при необходимости.
- Соберите ядро: make -jN; затем make modules_install и make install.
- Обновите GRUB/initramfs и перезагрузитесь.
- Тестируйте и держите откатную версию ядра.
Шаблон проверки перед новой сборкой
- Создайте бэкап /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
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента