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

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

10 min read Linux Обновлено 31 Dec 2025
Как скомпилировать ядро Linux
Как скомпилировать ядро Linux

Фото: ноутбук с процессом компиляции ядра на экране

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

О чём эта статья

  • Что такое ядро и почему его иногда компилируют вручную
  • Как получить исходные коды ядра (через пакет дистрибутива и с официального сайта)
  • Какие пакеты и инструменты нужны
  • Как правильно настроить .config и собрать ядро
  • Как установить ядро, сделать откат через GRUB и проверить работоспособность
  • Практические чек-листы, критерии приёмки, сценарии тестирования и план отката

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

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

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

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

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

Компиляция — это процесс преобразования исходного кода (обычно на языке C для ядра Linux) в машинный код, понятный CPU. Для этого используют компилятор (например, GCC), который переводит, оптимизирует и связывает объектные файлы.

В одной строке: компиляция превращает текст исходников в исполняемый образ и модули, которые можно загрузить как ядро в систему.

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

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

Через пакет дистрибутива (пример для Debian/Ubuntu)

На Debian-основанных системах удобно установить пакет исходников из репозитория:

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

После установки исходники обычно находятся в /usr/src/. Перейдите в эту папку и посмотрите содержимое:

cd /usr/src/
ls -la

Найдёте файл с расширением .tar.bz2, например linux-source-4.4.0.tar.bz2 — распакуйте его:

sudo tar xjvf linux-source-4.4.0.tar.bz2

Учтите: имена файлов и версии будут отличаться в зависимости от дистрибутива и пакета.

Скриншот: список файлов в каталоге /usr/src

Официальный сайт (kernel.org)

Если ваш дистрибутив не предоставляет исходники или вы хотите другую версию, загрузите tarball с kernel.org. Скачайте в отдельную пустую папку, чтобы удобно хранить разные версии.

Скриншот: сайт kernel.org с доступными версиями ядра

Распаковка xz-архива:

tar xJvf linux-4.9.11.tar.xz

Скриншот: распаковка архива с исходниками ядра

Совет: храните каждую версию ядра в отдельном каталоге вида ~/kernel/linux-4.xx/ — так проще управлять несколькими сборками.

Настройка ядра

Настройка — ключевой шаг. Здесь вы выбираете, какие драйверы и подсистемы будут включены. Можно собрать «полный» универсальный образ или минимальное ядро, поддерживающее только ваше железо.

Зачем кастомизировать

  • Уменьшение размера initramfs/ядра
  • Исключение неиспользуемых драйверов (лучше безопасность и чуть меньшая поверхность атаки)
  • Оптимизация производительности и времени загрузки
  • Поддержка специфичного оборудования или новых функций

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

Перед началом убедитесь, что установлены инструменты сборки. На Debian/Ubuntu набор выглядит так:

sudo apt-get install build-essential gcc libncurses5-dev libssl-dev

Пояснение: build-essential устанавливает GCC, make и другие инструменты; libncurses5-dev нужен для консольных конфигураторов (menuconfig). На других дистрибутивах пакеты могут называться иначе (например, ncurses-devel на Fedora).

Если вы распаковали исходники в домашнюю директорию, sudo не нужен для большинства операций, но при установке в /boot и обновлении grub привилегии потребуются.

Создание базовой конфигурации

Первая удобная команда — make localmodconfig. Она создаёт файл .config на основе модулей, загруженных в текущей системе. Это полезно для быстрого получения конфигурации, соответствующей текущему работающему ядру:

cd /path/to/linux-source-4.x
sudo make localmodconfig

Если исходники в вашем домашнем каталоге, sudo не обязателен.

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

Скриншот: подтверждение новой опции в конфигураторе

Если вы хотите начать с чистой сборки или возвратить всё в исходное состояние:

sudo make clean

Интерфейсы конфигурации

Редактировать .config вручную не рекомендуется; вместо этого используйте консольные интерфейсы make:

  • make menuconfig — текстовый интерфейс на базе ncurses
  • make nconfig — улучшенный ncurses-интерфейс с подсказками
  • make xconfig — GUI на Qt (требуются библиотеки)

Пример запуска nconfig:

sudo make nconfig

Навигация: стрелки, Enter для входа в подменю, пробел для переключения опций между встроенным (обычно ‘*’), модулем (‘M’) и выключено (пусто). Нажмите F2 для справки по выбранной опции, F9 — сохранить и выйти.

Скриншот: меню nconfig с подсказкой по опции

Статусы опций:

  • <> или [] — встроено в ядро
  • или [M] — собран как модуль, будет загружаться по требованию
  • — опция отключена

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

Совет: если вы собираете драйвер для устройств хранения (SATA, NVMe) и хотите загрузиться без initramfs, соберите эти драйверы встроенными (не в виде модулей).

Сохранение конфигурации

После правок сохраните .config (F9 в nconfig) и при необходимости проверьте его консистентность:

make oldconfig

make oldconfig задаст вопросы о новых опциях, добавленных в версии ядра, базируясь на текущем .config.

Скриншот: сохранение конфигурации ядра

Сборка и установка

После настройки можно перейти к сборке. Рекомендуется запустить сборку с параллельными потоками по количеству ядер процессора для ускорения:

sudo make -j$(nproc --all)

Если сборка идёт в вашем домашнем каталоге, sudo не требуется. Параметр -j ускоряет процесс за счёт параллельной компиляции, но загружает систему — при недостатке ресурсов можно указать меньший номер, например -j2.

Время сборки сильно зависит от конфигурации, количества модулей и мощности железа — от нескольких минут (минимальное ядро) до часов (полный набор модулей и оптимизаций).

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

sudo make modules_install
sudo make install

Команда make install обычно:

  • копирует скомпилированный vmlinuz и System.map в /boot
  • создаёт соответствующий initramfs (если конфигурация/дистрибутив поддерживает)
  • обновляет записи загрузчика (иногда это делается отдельной командой)

Проверьте, что в /boot появились файлы с именем, отражающим вашу версию ядра.

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

После установки нового ядра есть риск, что система не загрузится (например, отсутствует поддержка контроллера диска). Чтобы иметь возможность откатиться, откройте конфигурацию GRUB и отключите скрытую паузу загрузчика:

sudo nano /etc/default/grub

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

Скриншот: редактирование /etc/default/grub

После правки перегенерируйте конфигурацию GRUB:

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

Скриншот: вывод команды обновления конфигурации grub

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

Если система не загружается и вы не можете использовать GRUB, загрузитесь с Live-USB и восстановите прежний /boot или верните конфигурацию grub.

Тестирование и критерии приёмки

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

  • Система успешно загружается в графический/текстовый режим
  • Сеть (Ethernet/Wi‑Fi) работает как ожидается
  • Доступ к дискам/файловым системам корректен, тома монтируются
  • USB/внешние устройства функционируют
  • Ожидаемые модули загружаются (lsmod показывает необходимые модули)
  • Нет критических сообщений в dmesg, связанных с драйверами хранения или rootfs

Если вы используете LVM/RAID/шифрованные тома, проверьте процедуру расшифровки и монтирования — при неправильной конфигурации ядра загрузка может остановиться на этапе initramfs.

Тестовые сценарии

  1. Полная перезагрузка и вход в систему под обычным пользователем
  2. Проверка сетевого интерфейса: ping, dhclient (если DHCP)
  3. Проверка работы дисковых операций: чтение/запись на системный диск
  4. Тест USB-устройств: подключение флешки, проверка dmesg
  5. Проверка модулей: lsmod | grep
  6. Просмотр системных логов: journalctl -b

Откат и аварийный план

Если новое ядро не загружается:

  1. Загрузитесь в GRUB и выберите предыдущую (рабочую) версию ядра в Advanced options
  2. Если GRUB не доступен, загрузитесь с Live-USB, смонтируйте /boot и восстановите старые файлы ядра
  3. При необходимости удалите проблемную версию из /boot и обновите grub: sudo update-grub или sudo grub-mkconfig -o /boot/grub/grub.cfg

Храните в /boot не только последний образ, но и несколько предыдущих — это здоровая практика.

Частые ошибки и когда не стоит компилировать ядро

Когда компиляция не оправдана:

  • Вы используете сервер критичного времени простоя, и нет возможности протестировать откат
  • Ваш дистрибутив предлагает готовые, оптимизированные ядра с поддержкой всех нужных устройств
  • Вы не уверены в зависимости модулей (например, пропатченные драйверы сторонних вендоров)

Типичные ошибки:

  • Отключение драйверов контроллера диска, из‑за чего rootfs недоступен
  • Неправильная конфигурация initramfs: забыли включить необходимые модули
  • Отсутствие поддержки криптования дисков в собранном ядре
  • Неправильная процедура установки в /boot на системах с UEFI — убедитесь, что /boot/efi не пострадал

Безопасность и приватность

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

Чек-лист перед сборкой (роль: системный администратор)

  • Сделан полный бэкап /boot и списка установленных пакетов
  • Сохранён текущий образ ядра и System.map
  • Установлены инструменты сборки (gcc, make, ncurses)
  • Подготовлена live-микропрограмма для восстановления (Live-USB)
  • Составлен список критичных драйверов (диск, сеть, графика)
  • План отката документирован и доступен

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

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

Роль‑ориентированный краткий план

  • Системный администратор: подготовка бэкапов, управление GRUB, тестирование кластерной доступности
  • Девопс-инженер: автоматизация сборки, CI/CD для ядра (опционально), проверка совместимости с инфраструктурой
  • Пользователь/энтузиаст: выбор опций, минимизация образа, тестирование на персональном оборудовании

Когда компиляция даёт преимущество

  • Встраиваемые системы и окружения с жёсткими ограничениями по объёму
  • Требование специфичных патчей или экспериментальных драйверов
  • Оптимизация производительности под конкретный набор железа

Альтернативы компиляции вручную

  • Использовать ядры, собранные дистрибутивом или сторонним репозиторием (например, Ubuntu Mainline, Debian backports)
  • Использовать утилиты управления ядром (например, ukko, ukuu на Ubuntu — менеджеры версий)
  • Использовать готовые дистрибутивы с минимальными ядрами (для встраиваемых систем)

Факт‑бокс

  • Необходимые пакеты: gcc, make, libncurses5-dev, libssl-dev (названия зависят от дистрибутива)
  • Основные команды: make localmodconfig, make nconfig, make -jN, make modules_install, make install
  • Место исходников: /usr/src/ при установке из пакета или любой каталог при скачивании с kernel.org

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

  • Система загружается и работает без аварийных сообщений в логах
  • Все критичные сервисы стартуют и функционируют корректно
  • Нет потерянных данных после перезагрузки
  • Производительность в пределах ожидаемой (встроенные тесты при необходимости)

Сценарии тестирования/качества

  • Smoke-test: быстрая перезагрузка, вход в систему, простые операции IO
  • Полный тест: сетевые задачи, нагрузочное тестирование дисковой подсистемы, стресс CPU
  • Ручное тестирование периферии: Bluetooth, Wi‑Fi, USB-периферия, графический драйвер

Рекомендации по версии и обновлениям

  • Используйте LTS‑версии ядра для серверов и критичных систем
  • На десктопах можно пробовать более новые релизы, но тестируйте откат
  • Поддерживайте репозиторий исходников и автоматизируйте патчинг безопасности

Итог и дальнейшие шаги

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

Хотите шаблон playbook для автоматической сборки и тестирования ядра в CI? Нужен пример конфигурации .config для ноутбука с NVMe и Wi‑Fi Intel? Напишите, и я подготовлю примеры.

Image Credits: chombosan/Shutterstock

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

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

Слои в Canva: руководство по позиционированию
Дизайн

Слои в Canva: руководство по позиционированию

Лучшие уроки по анимации в Blender
3D анимация

Лучшие уроки по анимации в Blender

Whistle Phone на iPad — бесплатные звонки
VoIP

Whistle Phone на iPad — бесплатные звонки

Создать электронную книгу в Pages на Mac
Электронные книги

Создать электронную книгу в Pages на Mac

Как вставлять текст без форматирования
Инструкции

Как вставлять текст без форматирования

Instagram puzzle feed в Canva — шаги и шаблоны
SMM

Instagram puzzle feed в Canva — шаги и шаблоны