Найти в Дзене
Вот и Linux за окном

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

Компиляция собственного ядра Linux — это не только способ получить максимальную производительность и гибкость системы, но и отличная возможность глубже понять, как работает операционная система. В этом руководстве мы подробно разберём все этапы: от подготовки системы до запуска нового ядра и проверки его работоспособности. Особое внимание уделим настройке параметров, оптимизации под конкретное железо и решению типичных проблем. - Оптимизация под железо: включение только нужных драйверов и опций ускоряет загрузку и работу системы. - Поддержка нового оборудования: если ваше устройство не поддерживается стандартным ядром, можно добавить патчи. - Безопасность: отключение ненужных модулей снижает поверхность атаки. - Изучение: процесс сборки ядра — отличный способ изучить архитектуру Linux. Для сборки ядра потребуются инструменты компиляции, утилиты для работы с архивами, библиотеки для ncurses (для меню конфигурации) и другие зависимости. В Debian/Ubuntu: sudo apt update sudo apt install
Оглавление

Компиляция собственного ядра 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 для всего того, что не поместилось на канал ДЗЕН.