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

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

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

Ядро 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:

Шаг №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

Читайте также:  Редактор docx для windows

Пользователям 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:

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

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

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

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

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

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

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

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

Для навигации по меню применяются стрелки на клавиатуре. Пункт H elp > поможет вам узнать больше о различных параметрах. Когда вы закончите вносить изменения, выберите пункт S ave > , а затем выйдите из меню с помощью пункта E xit > .

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

Примечание: Если вы использовали вариант с копированием файла конфигурации, то перед переходом к следующему шагу, откройте этот файл и проверьте, что параметр 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: Сборка ядра

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

Процесс сборки и компиляции ядра 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 с помощью следующей команды:

Пользователям 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: Перезагрузка системы

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

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

Поделиться в социальных сетях:

Источник

Kernel (Русский)/Traditional compilation (Русский)

В статье представлена краткая инструкция по сборке собственного ядра из исходников kernel.org. Данный метод является традиционным и общим для всех дистрибутивов. В зависимости от вашего опыта, компиляция из исходников может показаться несколько более сложной в сравнении с использованием системы сборки. Инструменты Arch Build System разрабатывались как раз с целью сделать многократно повторяющиеся задачи по компиляции более удобными и безопасными.

Contents

Подготовка

Для подготовки ядра не требуется ни root-аккаунт, ни root-привилегии (например, через sudo).

Установка пакетов

Установите группу пакетов base-devel с набором необходимых инструментов вроде make и gcc . Также рекомендуется установить пакеты, указанные в стандартном PKGBUILD ядра Arch Linux: xmlto , kmod , inetutils , bc , libelf , git , cpio , perl , tar , xz .

Читайте также:  При загрузке windows включается bios

Создание каталога сборки

Рекомендуется создать отдельный каталог для сборки вашего ядра. В этом примере будет использоваться каталог kernelbuild в домашнем каталоге:

Загрузка исходников

Выберите версию ядра и загрузите файлы с исходным кодом с сайта https://www.kernel.org. Они будут иметь вид сжатого tar-архива (суффикс tar.xz ).

Загрузить можно просто через браузер (правый клик по ссылке с tar.xz и выбрать Save Link As. ) или любой другой программой, с графическим интерфейсом или интерфейсом командной строки, работающей через HTTP, TFTP, Rsync или Git.

Например, так выглядит загрузка ядра версии 4.8.6 в каталог

Также стоит проверить корректность загрузки. Скачайте файл подписи, с его помощью добудьте отпечаток (fingerprint) ключа, а с помощью отпечатка получите сам ключ:

Обратите внимание, что подпись создаётся для tar-архива (суффикс .tar ), а не для сжатого файла .tar.xz , который был загружен. Необходимо выполнить декомпрессию, но без извлечения архива. Для этого потребуется xz :

К последующим шагам нельзя переходить, если вы не получили вывод в виде «Good signature».

Если wget запускался не из каталога сборки, переместите в него скачанный архив:

Распаковка исходников

Распакуйте архив ядра в каталоге сборки:

Для завершения приготовлений убедитесь, что дерево файлов ядра абсолютно чистое; не стоит полагаться на то, что что оно будет таковым после распаковки. Перейдите в новый каталог с исходниками и выполните команду make mrproper :

Настройка

Это наиболее важный шаг в процессе «подгонки» ядра под точные характеристики вашего компьютера. Настройки ядра, включая используемые модули, задаются в файле .config .

Если правильно выбрать параметры в файле .config , то производительность вашего ядра и компьютера значительно вырастет.

Конфигурация ядра

Существует два способа создать конфигурацию:

  • A. Использовать стандартные настройки Arch для официального ядра (рекомендуется).
  • B. Сгенерировать файл с настройками ядра, работающего в данный момент (например, если вы желаете подкорректировать текущие настройки).

A. Стандартная конфигурация Arch

Этот метод предполагает создание нового файла .config на основе настроек стандартного ядра Arch. Если на вашей машине работает стандартное ядро, выполните следующую команду в каталоге с исходниками нового ядра:

В противном случае стандартную конфигурацию можно взять в официальном пакете ядра Arch Linux.

B. Сгенерированная конфигурация

С ядра 2.6.32 команда localmodconfig создаёт файл .config для нового ядра, отключив все опции, которые не заданы в работающем здесь и сейчас ядре. Другими словами, включены будут только опции, включённые в данный момент.

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

Продвинутая конфигурация

Существует ряд инструментов для тонкой настройки конфигурации ядра, которые можно использовать вместо многочасовой ручной настройки каждой возможной при компиляции опции.

  • make menuconfig : утилита командной строки с интерфейсом ncurses; была заменена nconfig .
  • make nconfig : новый инструмент командной строки с ncurses-интерфейсом.
  • make xconfig : более дружелюбный к пользвателю графический интерфейс, которому требуется пакет packagekit-qt5 в качестве зависимости. Это рекомендуемый метод — особенно для неопытных пользователей — поскольку в нём упрощена навигация, а также выводится справочная информация о каждой опции.
  • make gconfig : графический настройщик, похожий на xconfig, но использующий gtk.

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

После внесения всех необходимых изменений сохраните файл .config . Имеет смысл также сделать резервную копию этого файла вне каталога с исходниками. Возможно, придётся повторить процесс несколько раз, прежде чем результат вас устроит.

Читайте также:  Nokia lumia 630 windows 10 как установить

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

Команда $ lspci -k # в liveCD-окружении выведет список используемых модулей ядра. Важно также не забыть обеспечить поддержку cgroups. Это необходимо для systemd.

Компиляция

Время компиляции может варьироваться от небольшого (

15 минут) до значительного (более часа) в зависимости от настроек ядра и мощности процессора. После задания всех необходимых настроек нового ядра в файле .config , выполните в каталоге с исходниками следующую команду:

Установка

Установка модулей

После того, как ядро скомпилировано, то же самое необходимо сделать с модулями. Сначала соберите модули:

Затем установите их:

Эта команда скопирует откомпилированные модули в каталог /lib/modules/ — . Например, для ядра версии 4.8 они будут скопированы в /lib/modules/4.8.6-ARCH . Это позволяет хранить модули разных ядер в отдельных каталогах.

Копирование ядра в каталог /boot

В результате компиляции ядра создаётся bzImage (big zImage, «большой сжатый образ») этого ядра, который необходимо скопировать в каталог /boot и переименовать. Имя должно начинаться с vmlinuz- , окончание можно выбрать любое. В примерах ниже установленное и скомпилированное ядро версии 4.8 копируется и переименуется в vmlinuz-linux48 :

Создание начального RAM-диска

Если вы не знаете, что такое создание начального RAM-диска, изучите статьи initrd и mkinitcpio.

Автоматизированный метод

Чтобы initramfs для нового ядра был сгенерирован аналогично официальному ядру, можно скопировать и модифицировать существующий mkinitcpio preset. Это удобно при перекомпиляции ядра (например, после обновления). В примере ниже файл предустановок (preset file) стокового ядра Arch копируется и модифицируется под ядро версии 4.8, установленное выше.

Сначала скопируйте существующий preset-файл, переименовав его с использованием суффикса из /boot/vmlinuz- (в нашем случае — linux48 ):

Затем отредактируйте файл под новое ядро. В параметре ALL_kver= необходимо указать имя нового ядра, выбранное при копировании bzImage :

Наконец, сгенерируйте initramfs-образ для нового ядра:

Ручной метод

Вместо использования файла с предустановками можно сгенерировать initramfs-файл вручную посредством mkinitcpio:

  • -k ( —kernel ): указывает модули, которые будут использованы при генерации образа. Имя совпадает с именем каталога с исходниками нового ядра (и каталога с модулями для него, расположенного в /usr/lib/modules/ ).
  • -g ( —generate ): указывается имя initramfs-файла, который будет создан в каталоге /boot . Ещё раз — рекомендуется использовать стандартную схему именования, упомянутую выше.

Например, команда для ядра версии 4.8:

Копирование System.map

Файл System.map не требуется для загрузки Linux. Это что-то вроде «телефонной книги» со списком функций для конкретной сборки ядра. System.map содержит список символов ядра (т.е. имён функций, переменных и т.п.) и соответсвующих им адресов. Это отображение имён символов на адреса используется:

  • Некоторыми процессами вроде klogd, ksymoops и т.д.
  • Обработчиком OOPS, когда во время падения ядра на экран выводится информация (например, о том, какая именно функция вызывала падение).

Если ваш каталог /boot использует файловую систему с поддержкой символических ссылок (т.е. не FAT32), скопируйте System.map в /boot , добавив название ядра к итоговому файлу. Затем создайте символическую ссылку /boot/System.map на /boot/System.map- :

В итоге в /boot должно быть 3 файла и 1 символическая ссылка (не считая любых других файлов, находившихся там до этого):

  • Ядро: vmlinuz-
  • Initramfs: Initramfs- .img
  • System Map: System.map-
  • Символическая ссылка на System Map.

Настройка загрузчика

Добавьте в файл настроек загрузчика пункт с новым ядром. В статье Процесс загрузки Arch#Сравнение возможностей приведено сравнение доступных загрузчиков; также изучите соответствующие статьи.

Источник

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