Как собрать ядро Linux с нуля

  Дмитрий Бушуев  | 

  Обновл. 18 Июн 2021  | 

 14663

 ǀ   2 

Ядро Linux является основой дистрибутивов Linux. Оно связывает аппаратное и программное обеспечение компьютера, а также отвечает за распределение доступных ресурсов.

Если вы хотите отключить несколько опций и драйверов или попробовать экспериментальные исправления, то вам необходимо будет собрать ядро вручную. В этой статье вы узнаете, как с нуля самостоятельно скомпилировать и установить ядро Linux.

Сборка ядра Linux

Процесс сборки ядра Linux состоит из семи простых шагов. Однако для выполнения этой процедуры вам потребуется значительное количество времени (зависящее от характеристик вашего компьютера).

Примечание: Для сборки ядра Linux я выделил следующие ресурсы:

   виртуальная машина — VMware Workstation 15 Pro (15.5.6);

   дистрибутив — Debian Linux (ветка Testing);

   ресурсы — 2 ядра CPU (Ryzen 5 1600 AF), 2GB RAM, HDD;

   время компиляции — 3+ часа.

После этого я попробовал собрать ядро еще раз, перенеся образ виртуальной машины на NVMe SSD A-Data XPG SX8200 Pro (1TB), а также увеличив количество доступных для виртуальной машины ядер CPU до 6, а RAM — до 4GB. В таком варианте время компиляции составило около 1.5 часов.

Шаг №1: Загрузка исходного кода

Откройте сайт kernel.org и найдите архив с исходными кодами самой свежей версии ядра (Latest Release).

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

Затем откройте терминал и с помощью команды wget скачайте архив с исходным кодом ядра Linux:

$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.12.10.tar.xz


Шаг №2: Распаковка архива с исходным кодом

Распакуем архив, применив команду tar:

$ tar xvf linux-5.12.10.tar.xz


Шаг №3: Установка необходимых пакетов

Нам потребуются дополнительные утилиты, с помощью которых мы произведем компиляцию и установку ядра. Для этого выполните следующую команду:

Пользователям Debian/Ubuntu/Linux Mint:

$ sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison

Данная команда установит следующие пакеты:

Пакет Описание
git Утилита, помогающая отслеживать изменения в файлах исходного кода. А в случае какой-либо ошибки, эти изменения можно будет откатить.
fakeroot Позволяет запускать команду в среде, имитирующей привилегии root.
build-essential Набор различных утилит для компиляции программ (компиляторы gcc, g++ и пр.).
ncurses-dev Библиотека, предоставляющая API для программирования текстовых терминалов.
xz-utils Утилита для работы с архивами в .xz-формате.
libssl-dev Библиотека для разработки и поддержки протоколов шифрования SSL и TLS.
bc (Basic Calculator) Интерактивный интерпретатор, позволяющий выполнять скрипты с различными математическими выражениями.
flex (Fast Lexical Analyzer Generator) Утилита генерации программ, которые могут распознавать в тексте шаблоны.
libelf-dev Библиотека, используемая для работы с ELF-файлами (исполняемые файлы, файлы объектного кода и дампы ядра).
bison Создает из набора правил программу анализа структуры текстовых файлов.

Пользователям CentOS/RHEL/Scientific Linux:

$ sudo yum group install "Development Tools"

или

$ sudo yum groupinstall "Development Tools"

Также необходимо установить дополнительные пакеты:

$ sudo yum install ncurses-devel bison flex elfutils-libelf-devel openssl-devel

Пользователям Fedora:

$ sudo dnf group install "Development Tools"
$ sudo dnf install ncurses-devel bison flex elfutils-libelf-devel openssl-devel

Шаг №4: Конфигурирование ядра

Исходный код ядра Linux уже содержит стандартный файл конфигурации с набором различных настроек. Однако вы можете сами изменить его в соответствии с вашими потребностями.

Для этого перейдите с помощью команды cd в каталог linux-5.12.10:

$ cd linux-5.12.10

Скопируйте существующий файл конфигурации с помощью команды cp:

$ sudo cp -v /boot/config-$(uname -r) .config

Чтобы внести изменения в файл конфигурации, выполните команду make:

$ make menuconfig

Данная команда запускает несколько сценариев, которые далее откроют перед вами меню конфигурации:

Меню конфигурации включает в себя такие параметры, как:

   Firmware Drivers — настройка прошивки/драйверов для различных устройств;

   Virtualization — настройки виртуализации;

   File systems — настройки различных файловых систем;

   и пр.

Для навигации по меню применяются стрелки на клавиатуре. Пункт < Help > поможет вам узнать больше о различных параметрах. Когда вы закончите вносить изменения, выберите пункт < Save >, а затем выйдите из меню с помощью пункта < Exit >. 

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

Примечание: Если вы использовали вариант с копированием файла конфигурации, то перед переходом к следующему шагу, откройте этот файл и проверьте, что параметр CONFIG_SYSTEM_TRUSTED_KEYS у вас определен так же, как указано на следующем скриншоте:

В противном случае вы можете получить ошибку:

make[4]: *** No rule to make target 'debian/certs/test-signing-certs.pem', needed by 'certs/x509_certificate_list'. Stop.
make[4]: *** Waiting for unfinished jobs....

Шаг №5: Сборка ядра

Для старта сборки ядра выполните следующую команду:

$ make

Процесс сборки и компиляции ядра Linux занимает довольно продолжительное время.

Во время этого процесса в терминале будут перечисляться все выбранные компоненты ядра Linux: компонент управления памятью, компонент управления процессами, драйверы аппаратных устройств, драйверы файловых систем, драйверы сетевых карт и пр.

Затем нужно будет установить модули с помощью следующей команды:

$ sudo make modules_install

Осталось произвести установку нового ядра. Для этого необходимо выполнить:

$ sudo make install


Шаг №6: Обновление загрузчика

Загрузчик GRUB — это первая программа, которая запускается при включении системы.

Пользователям Debian/Ubuntu/Linux Mint:

Команда make install автоматически обновит загрузчик.

Для того, чтобы обновить загрузчик вручную, вам необходимо сначала обновить initramfs до новой версии ядра:

$ sudo update-initramfs -c -k 5.12.10

Затем обновить загрузчик GRUB с помощью следующей команды:

$ sudo update-grub2

Пользователям CentOS/RHEL/Scientific Linux :

$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
$ sudo grubby --set-default /boot/vmlinuz-5.6.9

Вы можете подтвердить детали с помощью следующих команд:

grubby --info=ALL | more
grubby --default-index
grubby --default-kernel

Шаг №7: Перезагрузка системы

После выполнения вышеописанных действий перезагрузите свой компьютер. Когда система загрузится, проверьте версию используемого ядра с помощью следующей команды:

$ uname -r

Как видите, теперь в системе установлено собранное нами ядро Linux-5.12.10.


Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (12 оценок, среднее: 4,83 из 5)
Загрузка...

Комментариев: 2

  1. Даниил:

    Можете подробнее описать, как изменить CONFIG_SYSTEM_TRUSTED_KEYS? Как открыть .config в текстовом редакторе?

    1. Анатолий:

      В той же папке: vim .config
      Дальше открываете гайд по vim и используете поиск, находите, меняете

Добавить комментарий для Анатолий Отменить ответ

Ваш E-mail не будет опубликован. Обязательные поля помечены *