Команда apt-get source linux или прямая загрузка архива с kernel.org — два основных способа получить исходники ядра Linux, и выбор между ними зависит от того, нужен ли вам ванильный код от разработчиков ядра или версия с патчами конкретного дистрибутива. Исходный код ядра распространяется свободно под лицензией GPLv2, поэтому любой пользователь может не только изучить его, но и собрать собственное ядро с нужными настройками.
В этой статье разберём, где находятся официальные исходники, как устроено дерево каталогов ядра, какие инструменты понадобятся для сборки и как не сломать рабочую систему при установке собственного ядра. Материал ориентирован на тех, кто делает первые шаги в работе с исходным кодом Linux.
Что представляют собой исходники ядра Linux
Исходники ядра — это полный набор файлов на языке C (с небольшими вставками на ассемблере), из которых компилируется бинарный образ ядра vmlinuz, модули и связанные компоненты. Ядро отвечает за управление памятью, процессами, драйверами устройств, сетевым стеком и файловыми системами — всё это присутствует в дереве исходников в виде отдельных подсистем.
Существует два основных вида исходников. Ванильное ядро (vanilla) — код в том виде, в каком его выпускают разработчики с kernel.org, без сторонних изменений. Ядро дистрибутива — те же исходники, но с патчами от мейнтейнеров Ubuntu, Debian, Fedora и других систем: исправления безопасности, дополнительные драйверы и специфические настройки.
Для сборки под свою систему обычно безопаснее брать исходники дистрибутива — они уже протестированы с его пакетной базой. Ванильное ядро имеет смысл, когда нужна новейшая версия или чистая база для разработки.
Где скачать исходники ядра
Официальный источник — сайт kernel.org, где публикуются все релизы в виде архивов .tar.xz и Git-репозиториев. Там же доступны стабильные ветки (stable) и версии с длительной поддержкой (LTS).
Основные способы получения кода:
- 📦 Скачать архив релиза с
kernel.orgи распаковать его командойtar -xf. - 🌿 Клонировать Git-репозиторий:
git cloneс указанием нужной ветки или тега версии. - 🐧 Установить пакет исходников дистрибутива, например
apt-get source linux-image-$(uname -r)в Debian и Ubuntu. - 💾 Поставить заголовочные файлы
linux-headers, если требуется только сборка внешних модулей, а не всего ядра.
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.xz
tar -xf linux-6.6.tar.xz
cd linux-6.6
Обратите внимание: полный Git-репозиторий занимает значительный объём на диске из-за всей истории изменений. Если история не нужна, используйте неглубокое клонирование с параметром --depth 1 или скачивайте готовый архив.
Структура дерева исходного кода
После распаковки архива вы увидите десятки каталогов. Разбираться во всех не обязательно, но знать назначение ключевых полезно для навигации и поиска нужного кода.
| Каталог | Содержимое |
|---|---|
arch/ | Код, специфичный для архитектур процессоров (x86, ARM и др.) |
drivers/ | Драйверы устройств — самая объёмная часть ядра |
fs/ | Реализации файловых систем (ext4, Btrfs, XFS и других) |
kernel/ | Ядро планировщика, управление процессами и прерываниями |
net/ | Сетевой стек: TCP/IP, сокеты, сетевые протоколы |
Кроме того, в корне дерева лежат системы сборки Kbuild и конфигурации Kconfig, а также файл Makefile верхнего уровня, через который запускается весь процесс компиляции. Документация по подсистемам собрана в каталоге Documentation/ — это первый источник, куда стоит смотреть при изучении конкретной части ядра.
Инструменты, необходимые для сборки
Прежде чем приступать к компиляции, убедитесь, что в системе установлены нужные пакеты. Минимальный набор: компилятор gcc, утилита make, библиотека libncurses-dev для текстового меню конфигурации, а также flex, bison и libssl-dev. Точные имена пакетов зависят от дистрибутива, поэтому сверяйтесь с его документацией.
В Debian-подобных системах зависимости обычно ставятся одной командой:
sudo apt install build-essential libncurses-dev flex bison libssl-dev libelf-dev bc
⚠️ Внимание: сборка ядра требует заметного объёма свободного места на диске и оперативной памяти. Перед началом убедитесь, что на разделе достаточно пространства, иначе компиляция прервётся с ошибкой на середине процесса.
Настройка конфигурации ядра
Конфигурация определяет, какие функции, драйверы и подсистемы попадут в собранное ядро. Хранится она в файле .config в корне дерева исходников. Самый безопасный способ начать — взять конфигурацию текущего работающего ядра:
cp /boot/config-$(uname -r) .config
make oldconfig
Для ручной настройки доступны несколько интерфейсов:
- 🖥️
make menuconfig— текстовое меню на основе ncurses, самый популярный вариант. - 🪟
make xconfigилиmake gconfig— графические интерфейсы для Qt и GTK. - ⚙️
make defconfig— конфигурация по умолчанию для вашей архитектуры. - 🔧
make localmodconfig— оставляет только модули, реально загруженные в системе, что ускоряет сборку.
☑️ Подготовка к сборке ядра
Чек-лист выше поможет ничего не забыть перед запуском компиляции. Особенно важен последний пункт: никогда не удаляйте рабочее ядро до того, как новое успешно загрузится.
Компиляция и установка ядра
Сама сборка запускается командой make. Для ускорения используйте параллельную компиляцию с параметром -j, где число соответствует количеству доступных потоков процессора:
make -j$(nproc)
sudo make modules_install
sudo make install
Команда make modules_install копирует модули в /lib/modules/, а make install устанавливает образ ядра в /boot и в большинстве дистрибутивов автоматически обновляет конфигурацию загрузчика GRUB. Если этого не произошло, обновите загрузчик вручную командой sudo update-grub (в системах, где она предусмотрена).
⚠️ Внимание: если после установки нового ядра система не загружается, выберите предыдущее ядро в меню GRUB (пункт «Дополнительные параметры»). Именно поэтому старое ядро нужно сохранять до полной проверки нового.
Типичные ошибки при работе с исходниками
Одна из частых проблем — конфликт версий: модуль, собранный под одну версию ядра, не загрузится в ядро другой версии. Всегда проверяйте соответствие через uname -r и каталог исходников, с которым работаете.
Другая типичная ситуация — ошибка компиляции из-за отсутствующих зависимостей. Текст ошибки обычно прямо указывает, какого пакета не хватает: найдите его в пакетном менеджере и повторите сборку. Прерванная компиляция продолжится с места остановки, начинать заново не требуется.
Также бывают случаи, когда собранное ядро загружается, но не работает сеть или звук. Возможная причина — нужный драйвер не включён в конфигурацию или собран модулем, который не загружается автоматически. Проверьте в menuconfig соответствующий раздел драйверов и сравните конфигурацию с файлом рабочего ядра.
Чем отличаются ветки stable, LTS и mainline
Mainline — самая свежая разрабатываемая версия, может содержать ошибки. Stable — стабилизированные релизы с исправлениями. LTS (Long Term Support) — версии с длительной поддержкой, которые получают исправления безопасности годами. Для рабочих систем обычно выбирают LTS.
Часто задаваемые вопросы
Где официально скачать исходники ядра Linux?
На сайте kernel.org — там публикуются все релизы в виде архивов и Git-репозиториев. Для ядра с патчами дистрибутива используйте пакетный менеджер вашей системы.
Чем отличаются linux-source и linux-headers?
linux-source — полное дерево исходников для сборки всего ядра. linux-headers — только заголовочные файлы и конфигурация, достаточные для компиляции внешних модулей и драйверов.
Сколько времени занимает сборка ядра?
Зависит от процессора, объёма памяти и конфигурации. Сокращённая конфигурация через make localmodconfig собирается заметно быстрее полной. Точное время предсказать нельзя — ориентируйтесь на характеристики своей машины.
Можно ли удалить старое ядро после установки нового?
Да, но только после того, как новое ядро успешно загрузилось и все устройства работают. Удаление выполняется через пакетный менеджер дистрибутива.
Нужно ли быть программистом, чтобы собрать ядро?
Нет. Сборка из готовых исходников — это выполнение последовательности команд и настройка конфигурации через меню. Навыки программирования потребуются только для изменения самого кода ядра.