Подробный гайд: Как собрать и установить кастомное ядро Linux
Важно:
- Сборка собственного ядра требует осторожности. Всегда оставляйте рабочее старое ядро, тестируйте изменения в виртуальной машине или на резервном диске, и делайте бэкапы /boot и /etc/default/grub.
1. Подготовка окружения
Требования к системе
- ОЗУ: минимум 4 ГБ (рекомендуется 8+ ГБ)
- Диск: 15–25 ГБ свободного места
- CPU: 2+ ядра (чем больше, тем быстрее сборка)
- ОС: Любой современный дистрибутив (Debian/Ubuntu, Fedora, Arch, openSUSE и др.)
Установка зависимостей
# Debian / Ubuntu
sudo apt update
sudo apt install build-essential flex bison libncurses-dev libssl-dev bc kmod cpio xz-utils fakeroot libelf-dev
# Fedora / RHEL / AlmaLinux
sudo dnf install gcc make flex bison ncurses-devel openssl-devel bc elfutils-libelf-devel perl
# Arch Linux
sudo pacman -S base-devel ncurses openssl bc kmod cpio xz elfutils
Совет:
- Установите
ccache(sudo apt install ccacheили аналог) и добавьтеexport CC="ccache gcc"в~/.bashrc. Это ускорит повторные сборки в 3–5 раз.
2. Получение исходного кода ядра
Вариант А: Стабильный релиз с kernel.org
mkdir ~/kernel-build && cd ~/kernel-build
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.x.x.tar.xz
tar -xf linux-6.x.x.tar.xz
cd linux-6.x.x
Вариант Б: Git (для отладочных/разработческих веток)
git clone --depth 1 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
git checkout v6.x.x # нужная версия
Версии:
stable(6.x.x) – рекомендуется для продакшенаlongterm(5.15, 6.1, 6.6) – поддержка 4–6 летmainline– новейшие фичи, может быть нестабильным
3. Настройка конфигурации ядра
Шаг 1: Базовый конфиг
Скопируйте конфигурацию текущего ядра (самый безопасный старт):
cp /boot/config-$(uname -r) .config
make olddefconfig # автоматически разрешит новые опции по умолчанию
Альтернативы:
make localmodconfig– оставит только модули, загруженные в данный момент (идеально для десктопа/ноутбука)make defconfig– стандартная конфигурация архитектурыmake tinyconfig– минимальное ядро для встраиваемых систем
Шаг 2: Интерактивная настройка
make menuconfig
Навигация: стрелки, Enter для входа в подменю, Space для выбора ([*] встроен, [M] модуль, [ ] отключено), Esc для выхода, Y/N для сохранения.
Что обычно меняют:
| Раздел | Что проверить |
|---|---|
File systems |
Поддержка вашей ФС (ext4, btrfs, xfs, ntfs3, exfat) |
Device Drivers → Graphics |
Драйверы GPU (amdgpu, nvidia, intel, nouveau) |
Device Drivers → Network |
Сетевые адаптеры, Wi-Fi, Bluetooth |
Kernel hacking |
Отключите Compile-time checks и Debug info для релиза |
General setup → Local version |
Добавьте суффикс, например -custom |
Processor type and features |
Включите Preemptible Kernel для десктопа, High Memory если >4 ГБ ОЗУ |
После настройки:
Esc→Save→ подтвердите имя.config.
4. Сборка ядра
Компиляция
make -j$(nproc)
-j$(nproc)использует все доступные ядра CPU- Процесс занимает 5–40 минут в зависимости от железа и выбранных модулей
- В конце появятся
arch/x86/boot/bzImage(x86_64) или аналог для вашей архитектуры
Сборка модулей (автоматически включена в make)
Если хотите собрать только модули:
make modules -j$(nproc)
Если сборка падает:
- проверьте вывод на отсутствие строк
error:. Чаще всего причина – нехватка ОЗУ, отсутствиеlibssl-dev/elfutils-libelf-develили конфликт версийgcc.
5. Установка и подготовка к загрузке
Установка модулей и ядра
sudo make modules_install
sudo make install
make install автоматически:
- Копирует
vmlinuz,System.map,.configв/boot - Обновляет символические ссылки
- В большинстве дистрибутивов не обновляет загрузчик автоматически
Создание initramfs (обязательно!)
# Debian / Ubuntu
sudo update-initramfs -c -k <версия-ядра>
# Fedora / RHEL / openSUSE
sudo dracut -H --force
# Arch Linux
sudo mkinitcpio -P
Узнать версию:
ls /boot/vmlinuz-*custom*илиgrep '^CONFIG_LOCALVERSION' .config
Обновление загрузчика
# GRUB (большинство дистрибутивов)
sudo update-grub # Debian/Ubuntu
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # Fedora/RHEL
# или
sudo grub-mkconfig -o /boot/grub/grub.cfg # Arch
# systemd-boot
sudo bootctl update
Проверьте, что новое ядро появилось в конфигурации:
grep -i "custom" /boot/grub/grub.cfg
6. Перезагрузка и проверка
- Перезагрузите систему:
sudo reboot - В меню GRUB выберите новое ядро (если не загружается по умолчанию)
3. После входа проверьте:
uname -r # должно выдать версию с вашим суффиксом
lsmod | head # загруженные модули
dmesg | tail -20 # последние сообщения ядра
journalctl -k --since "5 min ago" # логи ядра
7. Типичные проблемы и решения
| Проблема | Причина | Решение |
|---|---|---|
make падает с error: linux/kconfig.h: No such file |
Не установлены заголовки или повреждена сборка | make clean, убедитесь в наличии libncurses-dev, flex, bison |
Система не загружается, kernel panic - not syncing: VFS |
Нет initramfs или не подтянуты модули ФС/диска | Пересоздайте initramfs, проверьте CONFIG_BLK_DEV, CONFIG_EXT4_FS и т.д. |
| Не работает Wi-Fi/сеть | Драйвер собран как модуль, но не загружен | sudo modprobe <драйвер>, добавьте в /etc/modules или включите в ядро ([*]) |
| Долгая загрузка | Включены отладочные опции или printk в ядре |
Отключите Kernel hacking → Compile-time checks and compiler options |
| Secure Boot блокирует ядро | Ядро не подписано | Либо отключите Secure Boot в BIOS, либо подпишите ядро: sudo make INSTALL_MOD_STRIP=1 modules_install && sudo /usr/lib/linux-image-*/scripts/sign-file |
Откат:
- В GRUB нажмите
Shift/Escпри загрузке → выберите старое ядро → загрузитесь → удалите кастомное:
sudo rm -rf /lib/modules/<версия-custom>
sudo rm /boot/vmlinuz-<версия-custom> /boot/initrd.img-<версия-custom> /boot/config-<версия-custom> /boot/System.map-<версия-custom>
sudo update-grub
8. Лучшие практики
- Всегда используйте
localmodconfigперед ручной настройкой – это убирает 60–80% ненужных модулей. - Тестируйте в VM (QEMU/KVM, VirtualBox, GNOME Boxes) перед установкой на железо.
- Ведите журнал изменений: сохраняйте
.configпод разными именами (config-6.6-gaming,config-6.6-server). - Подписывайте модули если используете Secure Boot:
make modules_sign - Используйте
make deb-pkgилиmake rpm-pkgдля создания установочных пакетов (удобно для шаринга или отката). - Не отключайте
CONFIG_BLOCK,CONFIG_BLK_DEV,CONFIG_EXT4_FS– без них система не загрузится. - Обновляйте регулярно: ядро получает критические патчи безопасности ежемесячно. Следите за
kernel.org.