Компиляция собственного ядра Linux — это не только способ получить максимальную производительность и гибкость системы, но и отличная возможность глубже понять, как работает операционная система. В этом руководстве мы подробно разберём все этапы: от подготовки системы до запуска нового ядра и проверки его работоспособности. Особое внимание уделим настройке параметров, оптимизации под конкретное железо и решению типичных проблем.
1. Зачем компилировать ядро?
- Оптимизация под железо: включение только нужных драйверов и опций ускоряет загрузку и работу системы.
- Поддержка нового оборудования: если ваше устройство не поддерживается стандартным ядром, можно добавить патчи.
- Безопасность: отключение ненужных модулей снижает поверхность атаки.
- Изучение: процесс сборки ядра — отличный способ изучить архитектуру Linux.
2. Подготовка системы
2.1. Установка необходимых пакетов
Для сборки ядра потребуются инструменты компиляции, утилиты для работы с архивами, библиотеки для ncurses (для меню конфигурации) и другие зависимости.
В Debian/Ubuntu:
sudo apt update
sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev bc
В Fedora:
sudo dnf groupinstall "Development Tools"
sudo dnf install ncurses-devel openssl-devel bison flex elfutils-libelf-devel bc
2.2. Создание отдельного пользователя (рекомендуется)
Для сборки ядра лучше использовать обычного пользователя, а не root, чтобы избежать случайных ошибок.
sudo useradd -m kernelbuilder
sudo passwd kernelbuilder
su - kernelbuilder
3. Получение исходных кодов ядра
3.1. Скачивание с kernel.org
Перейдите на [kernel.org](https://www.kernel.org) и выберите нужную версию. Например, стабильную или LTS.
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.12.tar.xz
tar -xvf linux-6.1.12.tar.xz
cd linux-6.1.12
3.2. Использование исходников дистрибутива
В некоторых дистрибутивах (например, Debian) можно установить исходники текущего ядра:
sudo apt install linux-source-$(uname -r)
tar -xvf /usr/src/linux-source-*.tar.xz
cd linux-source-*
Это удобно, если вы хотите внести минимальные изменения в уже работающее ядро.
4. Конфигурация ядра
Это самый важный этап. От выбранных опций зависит размер, производительность и функциональность ядра.
4.1. Копирование текущей конфигурации
Самый безопасный способ — взять конфигурацию текущего ядра и обновить её для новой версии:
cp /boot/config-$(uname -r) .config
make olddefconfig
`olddefconfig` автоматически применит значения по умолчанию для новых опций.
4.2. Интерактивная настройка
Для тонкой настройки используйте:
make menuconfig
Откроется текстовое меню, где можно:
- Включать/отключать модули (M), встраивать в ядро (Y) или полностью убирать (N).
- Искать опции по названию (/).
- Читать подсказки по каждой опции (нажмите ?).
Рекомендации:
- Processor type and features: выберите свой CPU для оптимизации.
- Device Drivers: включайте только нужные драйверы как модули (M), чтобы ядро было компактным.
- File systems: включите поддержку вашей файловой системы (ext4, btrfs и т.д.).
- **Security options**: рассмотрите включение SELinux/AppArmor, если используете их.
4.3. Другие способы конфигурации
- `make xconfig` — графический интерфейс (требует Qt).
- `make gconfig` — графический интерфейс (требует GTK).
- `make localmodconfig` — создаст конфигурацию только на основе загруженных модулей текущей системы.
- `make defconfig` — минимальные настройки по умолчанию.
5. Компиляция ядра
5.1. Очистка
Перед сборкой рекомендуется очистить дерево исходников:
make clean mrproper
*Примечание: это удалит вашу `.config`. Если вы её сохранили, скопируйте обратно.*
5.2. Сборка ядра и модулей
Процесс состоит из двух этапов: сборка самого ядра (образа) и сборка модулей.
make -j$(nproc) bzImage modules
`nproc` определяет количество ядер процессора, что ускоряет сборку в разы.
5.3. Установка модулей
Установите скомпилированные модули в системный каталог:
sudo make modules_install
Файлы будут помещены в `/lib/modules/<версия_ядра>/`.
6. Установка ядра
6.1. Копирование файлов ядра
Образ ядра (`bzImage`) и другие файлы нужно скопировать в `/boot`.
sudo cp arch/x86_64/boot/bzImage /boot/vmlinuz-custom-6.1.12
sudo cp System.map /boot/System.map-custom-6.1.12
sudo cp .config /boot/config-custom-6.1.12
Для ARM или других архитектур путь к образу будет другим.
6.2. Создание initramfs
Initramfs — это временная файловая система, загружаемая в оперативную память на раннем этапе загрузки для монтирования корневого раздела.
Для дистрибутивов на базе Arch (mkinitcpio):
Создайте конфигурационный файл `/etc/mkinitcpio.d/linux-custom.preset`:
ALL_config="/boot/config-custom-6.1.12"
ALL_image="/boot/vmlinuz-custom-6.1.12"
ALL_initrd="/boot/initramfs-custom-6.1.12.img"
ALL_options=""
PRESETS=('custom')
Затем соберите образ:
sudo mkinitcpio -p linux-custom
Для Ubuntu/Debian (update-initramfs):
sudo update-initramfs -c -k <версия_ядра>
Для Fedora (dracut):
sudo dracut -f /boot/initramfs-<версия_ядра>.img <версия_ядра>
7. Обновление загрузчика
Система должна знать о новом ядре.
Для GRUB (самый популярный):
sudo grub-mkconfig -o /boot/grub/grub.cfg
Эта команда просканирует `/boot`, найдёт новое ядро и добавит его в меню загрузки.
Для systemd-boot:
sudo bootctl update
Для LILO:
sudo lilo -M /dev/sda master_boot_record
# Осторожно, может перезаписать MBR!
Укажите правильный диск (`/dev/sda`, `/dev/nvme0n1` и т.д.).
8. Перезагрузка и проверка
Перезагрузите компьютер.
В меню загрузчика GRUB выберите пункт с вашим новым ядром (обычно он будет в самом верху списка).
После загрузки системы проверьте версию:
uname -rВы должны увидеть `6.1.12` (или ту версию, которую вы собрали).
Проверьте наличие модулей:
lsmod | grep <название_модуля>
Проверьте логи загрузки на наличие ошибок:
dmesg | tail -n 50
или посмотрите файл `/var/log/kern.log`.
Если система не загружается, просто выберите старое ядро в меню GRUB и повторите настройку конфигурации.
Заключение
Т.к. статья сгенерирована ИИ к содержанию необходимо относится с осторожностью - возможна лажа. Если Вы успешно скомпилировали и запустили собственное ядро Linux, Вы можете экспериментировать с параметрами, добавлять патчи и оптимизировать систему под свои нужды.
Важно: Собирайте ядро только из проверенных источников и всегда оставляйте старое рабочее ядро в загрузчике на случай проблем.
PS
Уважаемые Читатели, в данный момент я готовлю очередную статью. И планирую опубликовать её как обычно в первый рабочий день недели. Но чтобы канал представлял собой интерес для Уважаемых Читателей во время вынужденного затишья, мне показалось хорошей идеей публиковать короткие новостные и разнотематические посты, которые готовятся с помощью GigaChat . Картинка для превью статьи сгенерирована Шедеврум. Канал MAX для всего того, что не поместилось на канал ДЗЕН.