- Автоматическая сборка модуля ядра ОС с помощью фреймворка DKMS в Linux
- Автоматическая сборка модуля ядра ОС с помощью фреймворка DKMS в Linux
- Установка компонентов фреймворка DKMS в Linux
- Автоматическая сборка модуля ядра ОС с помощью фреймворка DKMS
- Проверка работоспособности механизма автоматической пересборки модуля после обновления ядра ОС
- Заключение
- HOW-TO: Сборка ядра Linux
- Содержание
- Шаг 1. Получение исходного кода ядра
- Шаг 2. Получение необходимых для сборки пакетов
- Шаг 3. Применение патчей
- Шаг 4. Конфигурация будущей сборки ядра
- Шаг 5. Сборка ядра
- Шаг 6. Установка образов и заголовков ядра
- Шаг 7. Генерация начального RAM-диска
- Шаг 8. Обновление конфигурации загрузчика GRUB
- Шаг 9. Проверка ядра
- Как собрать ядро Linux с нуля
- Сборка ядра Linux
- Шаг №1: Загрузка исходного кода
- Шаг №2: Распаковка архива с исходным кодом
- Шаг №3: Установка необходимых пакетов
- Шаг №4: Конфигурирование ядра
- Шаг №5: Сборка ядра
- Шаг №6: Обновление загрузчика
- Шаг №7: Перезагрузка системы
Автоматическая сборка модуля ядра ОС с помощью фреймворка DKMS в Linux
Оригинал: How to build a kernel module with DKMS on Linux
Автор: Dan Nanni
Дата публикации: 8 апреля 2016 г.
Перевод: А.Панин
Дата перевода: 24 июля 2016 г.
Автоматическая сборка модуля ядра ОС с помощью фреймворка DKMS в Linux
Представьте, что вам понадобилось установить драйвер для недавно купленной графической карты, адаптера Wi-Fi или сетевой карты и по какой-то причине вы решили самостоятельно выполнить его компиляцию из доступных исходных кодов и установку (например, из-за того, что собранной версии драйвера, совместимой с вашей версией ядра ОС, попросту не существует, его собранная версия уже устарела или вам нужно использовать нестандартные параметры сборки). Для этого вы загрузили официальный исходный код этого драйвера, скомпилировали его версию, совместимую с вашей версией ядра ОС, установили скомпилированный модуль ядра ОС в систему и активировали его. Новое устройство было успешно распознано системой и начало корректно функционировать.
А теперь подумайте о том, что произойдет, если вы впоследствии обновите версию ядра ОС. Ваш драйвер был собран вне официального дерева исходных кодов ядра Linux, поэтому при обновлении версии ядра ОС драйвер перестанет корректно функционировать.
Как же решить данную проблему? Ну, вам придется повторно скомпилировать версию драйвера устройства, которая будет совместима с текущей версией ядра ОС, и установить ее в систему. Очевидно, что пересборка драйвера при каждом обновлении ядра ОС является не самым оптимальным решением.
В подобной ситуации может оказаться весьма полезным фреймворк динамической поддержки модулей ядра DKMS (Dynamic Kernel Module Support). Фреймворк DKMS позволяет осуществлять автоматическую пересборку модулей ядра Linux с использованием текущего дерева его исходных кодов по мере обновления версий. Производители аппаратного обеспечения нередко выпускают драйверы в виде пакетов DKMS, поэтому пользователи могут свободно обновлять версии ядер своих систем, не заботясь о сборке совместимых версий драйверов устройств. Конечный пользователь может настроить DKMS с целью автоматической пересборки любого драйвера устройства или модуля, исходный код которого не является частью официального дерева исходных кодов ядра Linux.
В рамках данной статьи я постараюсь продемонстрировать методику настройки механизма автоматической пересборки модуля ядра ОС на основе фреймворка DKMS в Linux.
Установка компонентов фреймворка DKMS в Linux
Вы можете установить компоненты фреймворка DKMS в различных дистрибутивах Linux таким же образом, как показано ниже. Для корректной работы DKMS необходим сборочный инструментарий (включающий такие инструменты, как gcc , make ) и набор заголовочных файлов, причем оба этих компонента должны автоматически устанавливаться силами менеджера пакетов программного обеспечения дистрибутива.
Debian, Ubuntu и Linux Mint:
В первую очередь следует подключить репозиторий EPEL, после чего достаточно выполнить следующую команду:
Автоматическая сборка модуля ядра ОС с помощью фреймворка DKMS
Теперь давайте разберемся с тем, как настроить фреймворк DKMS для автоматической пересборки модуля ядра ОС после обновления последнего. По сути, вам придется создать файл конфигурации DKMS для сборки и установки выбранного модуля ядра ОС в систему. После его создания установка всех обновлений ядра ОС будет инициировать пересборку заданного модуля средствами DKMS.
В данной статье я буду использовать в качестве примера модуль ядра ОС под названием ixgbe , который по своей сути является драйвером для сетевых карт производства компании Intel.
Во-первых, следует загрузить и распаковать архив исходного кода драйвера устройства в директорию /usr/src/ — .
После этого нужно создать файл конфигурации с именем dkms.conf в этой же директории.
Далее следует добавить исходный код данного модуля в дерево исходного кода ядра ОС на уровне фреймворка DKMS:
Более простая эквивалентная команда:
Теперь нужно собрать версию данного модуля, совместимую с текущей версией ядра ОС:
В данном случае также может использоваться более простая эквивалентная команда:
Наконец, нужно установить модуль, совместимый с текущей версией ядра ОС, в систему:
Разумеется, вы также можете воспользоваться более простой эквивалентной командой:
На данный момент модуль ядра ОС должен быть успешно установлен в систему. Вы можете проверить статус его установки с помощью следующей команды:
Проверка работоспособности механизма автоматической пересборки модуля после обновления ядра ОС
После того, как фреймворк DKMS настроен для автоматической пересборки драйвера ixgbe , я предлагаю рассмотреть изменения в системе, которые произойдут в результате обновления версии ядра ОС. Я буду обновлять ядро ОС версии 3.10.0-229 до версии 3.10.0-327 . В качестве тестового окружения будет использоваться дистрибутив CentOS 7, поэтому для обновления версии ядра ОС я воспользуюсь утилитой yum . Обратите внимание на то, что для корректной пересборки драйвера устройства средствами DKMS вместе с пакетами программного обеспечения с компонентами новой версии ядра ОС должен устанавливаться соответствующий пакет программного обеспечения с его заголовочными файлами.
Перед обновлением необходимо узнать версии драйвера ixgbe и текущего ядра ОС.
Несложно заметить, что драйвер устройства версии 4.3.15 был установлен средствами DKMS в директорию модулей ядра Linux версии 3.10.0-229 .
А теперь попробуем установить новую версию ядра ОС и соответствующих заголовочных файлов:
После перезагрузки с задействованием новой версии ядра ОС следует снова проверить версию драйвера ixgbe .
Вы должны обнаружить, что драйвер ixgbe той же версии был автоматически пересобран для ядра Linux новой версии 3.10.0-327 .
Обратите внимание на то, при обновлении версии ядра ОС без установки соответствующего набора заголовочных файлов сборка модуля средствами DKMS попросту не будет инициирована, следовательно, драйвер устройства не будет пересобран из своих исходных кодов. Вместо него будет использоваться официальный драйвер из состава новой версии ядра ОС (если такой доступен).
Например, ниже показан результат обновления ядра ОС без установки соответствующих заголовочных файлов, причем несложно заметить, что в результате был загружен немного устаревший драйвер устройства ixgbe из его состава.
Вы всегда можете пересобрать необходимый драйвер устройства средствами DKMS, самостоятельно инициировав его сборку. Конечно же, перед этим этом следует убедиться в наличии в системе заголовочных файлов для текущей версии ядра ОС.
Заключение
В данной статье была продемонстрирована методика использования фреймворка DKMS для автоматической пересборки модуля ядра ОС. Бесспорно, использование фреймворка DKMS не всегда является оправданным решением, особенно в системах Linux, находящихся в промышленной эксплуатации, в которых обычно запрещена установка компонентов сборочного инструментария. Но при этом DKMS значительно упрощает жизнь разработчиков программного обеспечения и пользователей персональных настольных систем, автоматически собирая необходимые модули ядра ОС по мере установки его обновлений.
Источник
HOW-TO: Сборка ядра Linux
Содержание
В данном пошаговом руководстве вы узнаете, как правильно собрать и установить ядро ветвей >2.6 в семействе ОС Ubuntu.
Шаг 1. Получение исходного кода ядра
Исходники ядра Ubuntu можно получить двумя способами:
150 Мб в текущую папку. Чтобы получить исходники ядра, версия которого установлена на компьютере выполните команду:
Или вместо `uname -r` можно указать конкретную версию из имеющихся в репозитории.
Не забудьте включить общий доступ к исходникам в репозитории ( Параметры системы → Программы и обновления → Программное обеспечение Ubuntu → Исходный код ). Из консоли это сделать можно раскомментировав строки начинающиеся с deb-src в файле /etc/apt/sources.list, а затем выполнить обновление командой: «sudo apt-get update».
Где — имя релиза, например:
Другие ядра
Также существуют ядра, работоспособность которых в Ubuntu не гарантируется. Например, известна проблема с рядом популярных системных приложений (в частности драйвера NVidia, VirtualBox), которые при своей установке компилируются под установленное ядро. Поэтому для их установки на ядро, нестандартное для данной версии Ubuntu (например, Ubuntu 16.04 идёт с ядром 4.4.0), может потребоваться их отдельная компиляция вручную или специальные патчи, а последние версии ядер с kernel.org приложение может вообще не поддерживать.
Распакуйте полученный архив, используя команды:
Или в случае с linux-source:
Шаг 2. Получение необходимых для сборки пакетов
Выполните следующие команды для установки основных пакетов:
Далее всё зависит от того, каким способом вы хотите произвести конфигурацию ядра. Это можно сделать несколькими способами.
В случае, если вы хотите использовать config, oldconfig, defconfig, localmodconfig или localyesconfig, вам больше не нужны никакие дополнительные пакеты. В случае же с оставшимися тремя вариантами необходимо установить также дополнительные пакеты.
Для установки пакетов, необходимых для использования menuconfig выполните следующую команду:
Для установки пакетов, необходимых для использования gconfig выполните следующую команду:
Для установки пакетов, необходимых для использования xconfig выполните следующую команду:
Шаг 3. Применение патчей
Официальные патчи уже наложены на исходники, если ядро получалось описанной выше командой:
Если вы никогда до этого не применяли патчей к исходному коду, то выполните следующую команду:
Эта команда установит программу patch, необходимую для, как можно догадаться, применения патчей. Теперь скачайте файл патча в папку, куда вы распаковали ядро. Это может быть либо архивный файл (напр. Bzip2 или Gzip), либо несжатый patch-файл.
На данный момент подразумевается, что вы уже сохранили файл в ту папку, куда ранее распаковали ядро, и установили программу patch.
Если скачанный вами файл был в формате Gzip (*.gz), тогда выполните следующую команду для распаковки содержимого архива:
Если скачанный вами файл был в формате Bzip2 (*.bz2), тогда выполните следующую команду для распаковки содержимого архива:
где 2.6.x.y — версия патча ядра. Соответствующие команды распакуют файл патча в папку с исходным кодом ядра. Прежде чем применить патч, необходимо удостовериться, что он заработает без ошибкок. Для этого выполните команду:
где 2.6.x.y — версия патча ядра. Эта команда сымитирует применение патча, не изменяя сами файлы.
Если при её выполнении не возникнет ошибок, то изменения можно смело внедрять в сами файлы. Для этого выполните команду:
где 2.6.x.y — версия патча ядра. Если не было никаких ошибок, значит к исходному коду был успешно применён патч.
где 2.6.x.y — версия патча и ваших исходников
Шаг 4. Конфигурация будущей сборки ядра
Перейдите в папку, куда вы распаковали ядро, выполнив команду
где 2.6.x.y — версия загруженного вами ядра.
На данный момент вы уже должны были определиться с методом конфигурации ядра (если нет, то ознакомьтесь с ними в разделе «Получение необходимых для сборки пакетов». В зависимости от этого, выполните следующую команду для запуска выбранного вами способа конфигурации:
После вызова соответствующая программа конфигурации будет запущена. Произведите необходимые настройки в соответствии с вашими потребностями, сохраните файл конфигурации и переходите к следующему шагу.
Шаг 5. Сборка ядра
Итак, приготовления завершены. Теперь можно запустить процесс сборки ядра. Чтобы это сделать, выполните команду:
Шаг 6. Установка образов и заголовков ядра
Когда сборка ядра подошла к концу, в вашей домашней папке появятся два deb-пакета. Их и необходимо установить. Для этого выполните команды:
где 2.6.x.y — версия собранного ядра, arc — архитектура процессора (i386 — 32-бит, amd64 — 64-бит).
Если вы не знаете точного названия пакета, выведите список файлов в домашнем каталоге командой
и найдите эти самые два пакета.
Шаг 7. Генерация начального RAM-диска
Для корректной работы Ubuntu требует наличия образа начального RAM-диска. Чтобы его создать, выполните команду:
где 2.6.x.y — версия собранного ядра.
Шаг 8. Обновление конфигурации загрузчика GRUB
Для того, чтобы новая версия ядра была доступна для выбора при загрузке компьютера, выполните следующую команду:
Файл menu.lst (для GRUB версии 1) или grub.cfg (для GRUB версии 2) обновится в соответствии с наличием установленных операционных систем и образов ядер.
Шаг 9. Проверка ядра
Сборка и установка ядра успешно выполнены! Теперь перезагрузите компьютер и попробуйте загрузить систему с новым ядром. Чтобы удостовериться, что система запущена с новым ядром, выполните команду
Она выведет на экран используемую версию ядра.
Если всё сделано правильно, то вы можете удалить архивы с исходным кодом и весь каталог linux-2.6.x.y в вашей домашней папке. Это освободит около 5 ГБ на вашем жёстком диске (размер освобождаемого пространства зависит от параметров сборки).
На этом процесс сборки и установки завершён, поздравляю!
Источник
Как собрать ядро 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
Пользователям 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.
Поделиться в социальных сетях:
Источник