Linux usr src kernels

Building a custom kernel/ru

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

Contents

Причины

Обычно пользователи пересобирают ядро по нескольким причинам:

  • для тестирования патчей
  • для переконфигурации существующего ядра
  • для изучения ядра и его разработки

Также эти инструкции могут быт применены для простой генерации дерева исходных кодов ядра.

Предварительные действия

Перед началом убедитесь, что в системе установлены все необходимые пакеты, включая следующие:

Чтобы установить эти пакеты, воспользуйтесь командой:

$ su -c 'dnf install yum-utils rpmdevtools'

Получение исходных кодов

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

1. Подготовьте окружение для создания пакетов в вашем домашнем каталоге, используя команду:

Эта команда создаёт дерево каталогов $/rpmbuild/SOURCES, $/rpmbuild/SPECS и $/rpmbuild/BUILD . Где $ — ваш домашний каталог.

2. Загрузите файл kernel-.src.rpm . Для этого может потребоваться включение репозитория исходников параметром —enablerepo ( yumdownloader —enablerepo= —source kernel )

$ yumdownloader --source kernel

3. Установите зависимости исходников для сборки ядра командой (команда выполняется с привилегиями root):

$ su -c 'yum-builddep kernel-.src.rpm'

4. Установите kernel-.src.rpm командой:

Эта команда запишет содержимое rpm-пакета в $/rpmbuild/SOURCES и $/rpmbuild/SPECS , где $ это ваш домашний каталог.
Можно игнорировать все сообщения похожие на эти:

warning: user kojibuilder does not exist - using root warning: group kojibuilder does not exist - using root

Необходимо свободное место на жёстком диске. Полный процесс сборки ядра требует несколько гигабайт свободного места на файловой системе в вашем домашнем каталоге.

Подготовка дерева исходных кодов ядра

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

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

$ cd ~/rpmbuild/SPECS $ rpmbuild -bp --target=uname -m kernel.spec

Теперь исходники находятся в каталоге $/rpmbuild/BUILD/kernel-/linux-. , где $ это ваш домашний каталог.

Копирование исходников и создание патча

Этот шаг нужен для применения патча к исходникам ядра. Если патч не нужен, то перейдите к разделу «Конфигурирование опциий ядра».

Скопируйте дерево исходников для сохранения оригинала при внесении изменений:

$ cp -r ~/rpmbuild/BUILD/kernel-2.6./linux-2.6.. ~/rpmbuild/BUILD/kernel-2.6..orig $ cp -al ~/rpmbuild/BUILD/kernel-2.6..orig ~/rpmbuild/BUILD/kernel-2.6..new

Вторая команда жёстко связывает деревья .orig и .new , чтобы команда diff выполнялась быстрее. Большинство текстовых редакторов знают как разрушать жёсткие связи, избегая проблем.

Изменения можно вносить прямо в код в дереве .new или копируя изменённые файлы. Такие файлы могут быть от разработчиков, которым нужно тестирование, из основной ветки ядра (ванилла), или из любого другого источника.

После модификации ветки .new , создаём патч. Для этого запускаем снова команду diff над полными .new и .orig деревьями следующей командой:

$ cd ~/rpmbuild/BUILD $ diff -uNrp kernel-2.6..orig kernel-2.6..new > ../SOURCES/linux-2.6-my-new-patch.patch

Замените linux-2.6-my-new-patch.patch на желаемое имя для нового патча.

Читайте также:  Восстановление файлов linux windows

Конфигурирование опций ядра

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

1. Переходим в каталог с исходным кодом ядра:

$ cd ~/rpmbuild/BUILD/kernel-2.6./linux-2.6../

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

2. Выберите желаемый файл конфигурации из ~/rpmbuild/BUILD/kernel-2.6./linux-2.6../configs Скопируйте его в ~/rpmbuild/BUILD/kernel-2.6./linux-2.6../.config :

3. Выполните следующую команду:

4. Затем выполните команду для выбора и сохранения требуемых опций в консольном (псевдографическом) режиме:

При этом должны быть установлены пакеты ncurses и ncurses-devel . Для их установки выполните:

$ su -c 'yum install ncurses ncurses-devel'

Или в графическом режиме:

5. Проверьте наличие в самом начале конфигурационного файла строки, содержащей название платформы, для которой создаётся ядро (вывод команды uname -i ). В начале этой строки должен стоять знак #. Например, для архитектуры x86_64 должно быть:

6. Скопируйте файл конфига в ~/rpmbuild/SOURCES/ :

$ cp .config ~/rpmbuild/SOURCES/config--generic

Подготовка файлов сборки

На данном шаге вносим необходимые изменения в файл kernel.spec . Данный шаг необходим для сборки собственного ядра.

1. Переходим в каталог ~/rpmbuild/SPECS :

2. Открываем файл kernel.spec для редактирования.

3. Даём ядру уникальное имя. Важно убедиться, что имя вашего ядра отличается от имён релизных (исходных и будущих) ядер. Добавьте уникальную строку в название ядра, отредактировав строку buildid . Измените .local на ваши инициалы, дату или любое другое уникальное значение.

Отредактируйте эту строку:

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

# cputime accounting is broken, revert to 2.6.22 version Patch2220: linux-2.6-cputime-fix-accounting.patch Patch9999: linux-2.6-samfw-test.patch

Затем надо добавить команду применения патча в spec -файл. Снова, добавьте в конец файла и прокомментируйте:

ApplyPatch linux-2.6-cputime-fix-accounting.patch ApplyPatch linux-2.6-samfw-test.patch

Сборка нового ядра

На этом шаге создаются RPM-файлы ядра. Данный шаг необходим для сборки собственного ядра.

В большинстве случаев, проще собрать с включёнными файлами firmware (см. последний блок кода ниже). Такая сборка является предпочтительной в большинстве случаев. Если вы не уверены, то выбирайте именно её.

Используйте утилиту rpmbuild для сборки нового ядра:
Для создания всех возможных файлов:

$ rpmbuild -bb --target=uname -m kernel.spec

Для исключения специфичных файлов из сборки (для более быстрой сборки):

$ rpmbuild -bb --without --target=uname -m kernel.spec

Возможные значения для «option»: xen, smp, up, pae, kdump, debug и debuginfo . Указание —without debug уберёт некоторый отладочный код из ядра, а указание —without debuginfo отменит создание пакетов kernel-debuginfo .

Для сборки только конкретного ядра:

$ rpmbuild -bb --with --target=uname -m kernel.spec

Возможные значения для «option»: xenonly, smponly, paeonly и baseonly .
Например, для сборки пакетов kernel и kernel-devel команда выглядит так:

$ rpmbuild -bb --with baseonly --without debuginfo --target=uname -m kernel.spec

Для сборки с включёнными файлами firmware :

$ rpmbuild -bb --with baseonly --with firmware --without debuginfo --target=uname -m kernel.spec

Процесс сборки занимает много времени. Множество сообщений выводится на экран. На эти сообщения можно не обращать внимания, если сборка заканчивается без ошибок. В результате, собранные пакеты будут лежать в ~/rpmbuild/RPMS/ .

Читайте также:  Linux форматирование флешки через терминал

Совместимость со стандартными руководствами

Многие руководства и примеры по разработке ядра подразумевают, что исходники ядра установлены в /usr/src/linux/ . Чтобы эти руководства работали установите исходники как сказано выше и создайте символическую ссылку:

$ su -c 'ln -s /usr/src/kernels/.- /usr/src/linux'

Для этой операции нужен пароль root .

Установка нового ядра

На данном шаге устанавливаем новое ядро в систему. Для этого потребуются права root .

Для установки нового ядра используйте команду rpm -ivh , т.е. без опции -U или —upgrade :

$ cd ~/rpmbuild/RPMS// $ su -c 'rpm -ivh kernel-..rpm'

Если вместо установки появится ошибка, что более новый пакет уже установлен, то добавьте опцию —oldpackage .
Если вы правильно изменили имя вашего ядра, то ваши firmware и заголовочные файлы ядра (kernel headers) не будут соответствовать. Простейшее решение — это собрать новые firmware , как указано выше в «Сборка нового ядра», а затем выполнить следующее:

$ cd ~/rpmbuild/RPMS// $ su -c 'rpm -ivh kernel-..rpm kernel-firmware-..rpm kernel-headers-..rpm kernel-devel-..rpm'

Copyright © 2023 Red Hat, Inc. and others. All Rights Reserved. For comments or queries, please contact us.

The Fedora Project is maintained and driven by the community and sponsored by Red Hat. This is a community maintained site. Red Hat is not responsible for content.

  • This page was last edited on 24 March 2016, at 16:23.
  • Content is available under Attribution-Share Alike 4.0 International unless otherwise noted.
  • Privacy policy
  • About Fedora Project Wiki
  • Disclaimers
  • Code of Conduct
  • Sponsors
  • Legal
  • Trademark Guidelines

Источник

How to Install Kernel Headers in CentOS 7

When you compile a custom kernel module such as a device driver on a CentOS system, you need to have kernel header files installed on the system, which include the C header files for the Linux kernel. Kernel header files provide different kinds of function and structure definitions required when installing or compiling any code that interfaces with the kernel.

When you install Kernel Headers, make sure it matches with the currently installed kernel version on the system. If your Kernel version comes with the default distribution installation or you have upgraded your Kernel using yum package manager from system base repositories, then you must install matching kernel headers using package manager only. If you’ve compiled Kernel from sources, you can install kernel headers from sources only.

In this article, we will explain how to install Kernel Headers in CentOS/RHEL 7 and Fedora distributions using default package manager.

Install Kernel Headers in CentOS 7

First confirm that the matching kernel headers are already installed under /usr/src/kernels/ location on your system using following commands.

Читайте также:  Операционные системы web linux

Check Kernel Headers in CentOS 7

If no matching kernel headers are located in the /usr/src/kernels/ directory, go ahead and install kernel headers, which is provided by the kernel-devel package that can be installed using default package manager as shown.

# yum install kernel-devel [On CentOS/RHEL 7] # dnf install kernel-devel [On Fedora 22+]

Install Kernel Headers in CentOS 7

After installing the kernel-devel package, you can find all the kernel headers files in /usr/src/kernels directory using following command.

# ls -l /usr/src/kernels/$(uname -r)

Note on a VPS (for instance a Linode VPS), a kernel may have a customized version name, in such scenario, you have to identify the kernel version manually and check the installed kernel header files using following commands.

# uname -r # ls -l /usr/src/kernels/3.10.0-862.2.3.el7.x86_64

Check Kernel Version in CentOS 7

Sample Output
total 4544 drwxr-xr-x. 32 root root 4096 May 16 12:48 arch drwxr-xr-x. 3 root root 4096 May 16 12:48 block drwxr-xr-x. 4 root root 4096 May 16 12:48 crypto drwxr-xr-x. 119 root root 4096 May 16 12:48 drivers drwxr-xr-x. 2 root root 4096 May 16 12:48 firmware drwxr-xr-x. 75 root root 4096 May 16 12:48 fs drwxr-xr-x. 28 root root 4096 May 16 12:48 include drwxr-xr-x. 2 root root 4096 May 16 12:48 init drwxr-xr-x. 2 root root 4096 May 16 12:48 ipc -rw-r--r--. 1 root root 505 May 9 19:21 Kconfig drwxr-xr-x. 12 root root 4096 May 16 12:48 kernel drwxr-xr-x. 10 root root 4096 May 16 12:48 lib -rw-r--r--. 1 root root 51205 May 9 19:21 Makefile -rw-r--r--. 1 root root 2305 May 9 19:21 Makefile.qlock drwxr-xr-x. 2 root root 4096 May 16 12:48 mm -rw-r--r--. 1 root root 1093137 May 9 19:21 Module.symvers drwxr-xr-x. 60 root root 4096 May 16 12:48 net drwxr-xr-x. 14 root root 4096 May 16 12:48 samples drwxr-xr-x. 13 root root 4096 May 16 12:48 scripts drwxr-xr-x. 9 root root 4096 May 16 12:48 security drwxr-xr-x. 24 root root 4096 May 16 12:48 sound -rw-r--r--. 1 root root 3409102 May 9 19:21 System.map drwxr-xr-x. 17 root root 4096 May 16 12:48 tools drwxr-xr-x. 2 root root 4096 May 16 12:48 usr drwxr-xr-x. 4 root root 4096 May 16 12:48 virt -rw-r--r--. 1 root root 41 May 9 19:21 vmlinux.id

In addition, if you need header files for the Linux kernel for use by glibc, install the kernel-header package using following command.

# yum install kernel-headers [On CentOS/RHEL 7] # dnf install kernel-headers [On Fedora 22+]

Now you are good to go with compiling your own or existing kernel modules for software such as VirtualBox and many more.

That’s it! In this article, we have explained how to install kernel-devel and kernel-header packages in CentOS/RHEL 7 and Fedora systems. Remember that before you can compile kernel modules such as device driver on a Linux system, you should have necessary kernel header files installed. If you have queries, please use the comment form below to reach us.

Источник

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