Unix2017b/Сборка ядра ОС Linux
Зачем пересобирать ядро? Обычно этого делать не нужно, так как ядро, устанавливаемое по умолчанию в современных дистрибутивах, подходит для многих конфигураций. Однако, полезно пересобрать ядро в следующих случаях:
- если установлено специфичное оборудование или возникает конфликт аппаратного обеспечения со стандартным ядром;
- чтобы задействовать свойства, которых нет в поставляемых сборках ядра;
- для оптимизации ядра, удаляя ненужные драйверы для уменьшения времени загрузки;
- создания монолитного ядра, без модулей;
- для установки обновлённого или разрабатываемого ядра;
- чтобы больше узнать о ядрах Linux.
В стародавние времена приходилось регулярно перекомпилировать ядра.
Способы
Стандартное расположение исходников ядра — /usr/src. Однако обычно предпочтительнее собирать ядро от имени непривилегированного пользователя в $HOME, затем устанавливать в систему от имени суперпользователя.
Сборка современных версий ядер (в зависимости от конфигурации) требует около 15 ГБ места на диске. В ядре более 20 млн строк кода.
Классический путь
$ make $ make modules # make modules_install # make install
Способ универсален, но имеет некоторые недостатки. Например, затруднено удаление ядра: после установки нужно вручную удалять файлики
- /boot/vmlinuz*KERNEL-VERSION*
- /boot/initrd*KERNEL-VERSION*
- /boot/System-map*KERNEL-VERSION*
- /boot/config-*KERNEL-VERSION*
- /lib/modules/*KERNEL-VERSION*/
- /var/lib/initramfs/*KERNEL-VERSION*/
Debian-способ
Управлять ядрами с помощью системы управления пакетами на самом деле безопаснее и легче.
fakeroot make-kpkg --initrd --append-to-version=-patched kernel-image kernel-headers
Другие диструбутивоспецифичные способы
Практика
Будем экспериментировать на ОС Ubuntu.
sobols@sobols-VirtualBox:~$ uname -a Linux sobols-VirtualBox 4.4.0-119-generic #143-Ubuntu SMP Mon Apr 2 16:08:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux sobols@sobols-VirtualBox:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.1 LTS Release: 16.04 Codename: xenial
Скачиваем свежий ванильный архив с официального сайта:
$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.16.1.tar.xz tar xf linux-4.16.1.tar.xz cd linux-4.16.1
Скорее всего, нужно будет доустановить некоторые пакеты.
Чтобы воспользоваться консольным конфигуратором, понадобится библиотека для псевдографики:
$ sudo apt-get install libncurses5-dev bison flex
make oldconfig
Берёт существующий конфиг (либо из файла .config в корне исходников ядра, либо из /boot/ для той версии ядра, которая используется в данный момент) и выставляет новые опции (на выбор пользователя или по умолчанию).
# # configuration written to .config #
Если вопросов много и мы не хотим отвечать, можно везде брать значение по умолчанию:
yes "" | make oldconfig
make olddefconfig
Аналогичная команда, строит новый конфиг на базе старого, новые опции ставятся по умолчанию.
make menuconfig
Имеет псевдографический интерфейс в виде меню. Программа основана на библиотеке ncurses.
Для интереса выставим в General Setup -> Local version значение -bsu.
make localmodconfig
Выбрать, какие модули собирать в составе ядра, на основе работающей хост-системы [1].
Поехали!
make -j2
Недолго музыка играла.
HOSTCC scripts/recordmcount HOSTCC scripts/sortextable HOSTCC scripts/asn1_compiler HOSTCC scripts/sign-file scripts/sign-file.c:25:30: fatal error: openssl/opensslv.h: No such file or directory compilation terminated. scripts/Makefile.host:107: recipe for target 'scripts/sign-file' failed make[1]: *** [scripts/sign-file] Error 1
Ищем, какой пакет доустановить.
$ dpkg -S opensslv.h dpkg-query: no path found matching pattern *opensslv.h* $ apt-cache search openssl
$ sudo apt-get install libssl-dev
Возможно, придётся ещё что-то доустановить.
Наконец, всё должно собраться:
$ make CHK include/config/kernel.release CHK include/generated/uapi/linux/version.h CHK include/generated/utsrelease.h CHK include/generated/timeconst.h CHK include/generated/bounds.h CHK include/generated/asm-offsets.h CALL scripts/checksyscalls.sh CHK include/generated/compile.h DATAREL arch/x86/boot/compressed/vmlinux Kernel: arch/x86/boot/bzImage is ready (#1) Building modules, stage 2. MODPOST 4548 modules
Установка ядра
# make modules_install
Разместит *.ko-файлы в /lib/modules.
# make install
Разместит файлы в /boot/.
188K config-4.4.0-57-generic 196K config-4.9.0BSU 35M initrd.img-4.4.0-57-generic 309M initrd.img-4.9.0BSU 3,7M System.map-4.4.0-57-generic 3,9M System.map-4.9.0BSU 6,8M vmlinuz-4.4.0-57-generic 7,0M vmlinuz-4.9.0BSU
Ужас, рамдиск получился огромный! Оказывается, надо было при установке передавать опцию INSTALL_MOD_STRIP=1.
35M initrd.img-4.4.0-57-generic 34M initrd.img-4.9.0BSU
$ uname -a Linux sobols-VirtualBox 4.9.0BSU #1 SMP Thu Dec 22 03:09:25 +03 2016 x86_64 x86_64 x86_64 GNU/Linux
update-initramfs
# update-initramfs -u -v . # ls /usr/share/initramfs-tools
Настройка GRUB
Конфигурационный файл лежит в /etc/default/grub
Включаем меню выбора ОС:
#GRUB_HIDDEN_TIMEOUT=0
После того, как мы отредактировали и сохранили файлы конфигурации GRUB, радоваться еще рано. Теперь нужно закончить дело, обновив наш «/boot/grub/grub.cfg». Это довольно просто — нужно всего лишь выполнить команду
sudo update-grub2
Она выполнит скрипты в каталоге «/etc/grub.d» и применит заданные в «/etc/default/grub» параметры. После этого смело перезагружаемся.
Как пересобрать ядро linux
Ето В kernel сделаю.
Support for frame buffer devices FB->VESA VGA graphics support FB_VESA
Select all in the:
Console display driver support ->
selct all in the:
Bootup logo LOGO->
kernel /boot/vmlinuz-2.6.29.3 root=UUID=d5b52903-5. video=vesafb vga=0x0323 ro quiet
-В file /etc/modprobe.d/blacklist-framebuffer.conf, comment this row:
-in the file /etc/initramfs-tools/modules, add:
-in the end update initramfs this command:
HOW-TO: Сборка ядра Linux
В данном пошаговом руководстве вы узнаете, как правильно собрать и установить ядро ветвей >2.6 в семействе ОС Ubuntu.
Шаг 1. Получение исходного кода ядра
Исходники ядра Ubuntu можно получить двумя способами:
Установив архив из репозитория, с автоматическим наложением последних официальных патчей. При этом скачается пакет размером ~150 Мб в текущую папку. Чтобы получить исходники ядра, версия которого установлена на компьютере выполните команду:
apt-get source linux-image-`uname -r`
Или вместо `uname -r` можно указать конкретную версию из имеющихся в репозитории.
Список имеющихся в репозитории версий можно увидеть набрав команду: «apt-get source linux-image-» и, не нажимая Enter , нажать два раза клавишу Tab .
Не забудьте включить общий доступ к исходникам в репозитории ( Параметры системы → Программы и обновления → Программное обеспечение Ubuntu → Исходный код ). Из консоли это сделать можно раскомментировав строки начинающиеся с deb-src в файле /etc/apt/sources.list, а затем выполнить обновление командой: «sudo apt-get update».
Самая свежая версия ядра доступна по git. Размер скачиваемого пакета ~500—800 Мб.
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-.git
Где
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-xenial.git
Другие ядра
Также существуют ядра, работоспособность которых в Ubuntu не гарантируется. Например, известна проблема с рядом популярных системных приложений (в частности драйвера NVidia, VirtualBox), которые при своей установке компилируются под установленное ядро. Поэтому для их установки на ядро, нестандартное для данной версии Ubuntu (например, Ubuntu 16.04 идёт с ядром 4.4.0), может потребоваться их отдельная компиляция вручную или специальные патчи, а последние версии ядер с kernel.org приложение может вообще не поддерживать.
Архив с базовой версий без патчей, т.е. например «4.8.0», «4.8.10»:
sudo apt-get install linux-source
Ядра тестовой линии Mainline: http://kernel.ubuntu.com/~kernel-ppa/mainline/
Общие ядра Linux, не адаптированные к Ubuntu: kernel.org
Распакуйте полученный архив, используя команды:
cd ~/ tar -xjf linux-2.6.x.y.tar.bz2
Или в случае с linux-source:
cd /usr/src tar -xjf linux-source-2.6.x.y.tar.bz2
Шаг 2. Получение необходимых для сборки пакетов
Данный шаг необходимо выполнить, только если ядро собирается на компьютере в первый раз
Выполните следующие команды для установки основных пакетов:
sudo apt-get update sudo apt-get build-dep linux sudo apt-get install kernel-package
Далее всё зависит от того, каким способом вы хотите произвести конфигурацию ядра. Это можно сделать несколькими способами.
config — традиционный способ конфигурирования. Программа выводит параметры конфигурации по одному, предлагая вам установить для каждого из них свое значение. Не рекоммендуется для неопытных пользователей.
oldconfig — файл конфигурации создаётся автоматически, основываясь на текущей конфигурации ядра. Рекомендуется для начинающих.
defconfig — файл конфигурации создаётся автоматически, основываясь на значениях по-умолчанию.
menuconfig — псевдографический интерфейс ручной конфигурации, не требует последовательного ввода значений параметров. Рекомендуется для использования в терминале.
xconfig — графический (X) интерфейс ручной конфигурации, не требует последовательного ввода значений параметров.
gconfig — графический (GTK+) интерфейс ручной конфигурации, не требует последовательного ввода значений параметров. Рекомендуется для использования в среде GNOME.
localmodconfig — файл конфигурации, создающийся автоматически, в который включается только то, что нужно данному конкретному устройству. При вызове данной команды большая часть ядра будет замодулирована
localyesconfig — файл конфигурации, похожий на предыдущий, но здесь большая часть будет включена непосредственно в ядро. Идеальный вариант для начинающих.
В случае, если вы хотите использовать config, oldconfig, defconfig, localmodconfig или localyesconfig, вам больше не нужны никакие дополнительные пакеты. В случае же с оставшимися тремя вариантами необходимо установить также дополнительные пакеты.
Для установки пакетов, необходимых для использования menuconfig выполните следующую команду:
sudo apt-get install libncurses5-dev
Для установки пакетов, необходимых для использования gconfig выполните следующую команду:
sudo apt-get install libgtk2.0-dev libglib2.0-dev libglade2-dev
Для установки пакетов, необходимых для использования xconfig выполните следующую команду:
До Ubuntu 12.04:
sudo apt-get install qt3-dev-tools libqt3-mt-dev
sudo apt-get install libqt4-dev
Шаг 3. Применение патчей
Данный шаг не является обязательным.
Официальные патчи уже наложены на исходники, если ядро получалось описанной выше командой:
apt-get source linux-image-`uname -r`
Если вы никогда до этого не применяли патчей к исходному коду, то выполните следующую команду:
sudo apt-get install patch
Эта команда установит программу patch, необходимую для, как можно догадаться, применения патчей. Теперь скачайте файл патча в папку, куда вы распаковали ядро. Это может быть либо архивный файл (напр. Bzip2 или Gzip), либо несжатый patch-файл.
На данный момент подразумевается, что вы уже сохранили файл в ту папку, куда ранее распаковали ядро, и установили программу patch.
Если скачанный вами файл был в формате Gzip (*.gz), тогда выполните следующую команду для распаковки содержимого архива:
gunzip patch-2.6.x.y.gz
Если скачанный вами файл был в формате Bzip2 (*.bz2), тогда выполните следующую команду для распаковки содержимого архива:
bunzip2 patch-2.6.x.y.bz2
где 2.6.x.y — версия патча ядра. Соответствующие команды распакуют файл патча в папку с исходным кодом ядра. Прежде чем применить патч, необходимо удостовериться, что он заработает без ошибкок. Для этого выполните команду:
patch -p1 -i patch-2.6.x.y --dry-run
где 2.6.x.y — версия патча ядра. Эта команда сымитирует применение патча, не изменяя сами файлы.
Если при её выполнении не возникнет ошибок, то изменения можно смело внедрять в сами файлы. Для этого выполните команду:
patch -p1 -i patch-2.6.x.y
где 2.6.x.y — версия патча ядра. Если не было никаких ошибок, значит к исходному коду был успешно применён патч.
Внимание! Перед тем, как применять патч, проведите следующие действия: 1. Скачайте с http://www.kernel.org патч той же версии, что и ваших исходников. 2. Выполните следующую команду:
patch -p1 -Rгде 2.6.x.y - версия патча и ваших исходников
Шаг 4. Конфигурация будущей сборки ядра
Перейдите в папку, куда вы распаковали ядро, выполнив команду
cd ~/linux-2.6.x.yгде 2.6.x.y - версия загруженного вами ядра.
На данный момент вы уже должны были определиться с методом конфигурации ядра (если нет, то ознакомьтесь с ними в разделе «Получение необходимых для сборки пакетов». В зависимости от этого, выполните следующую команду для запуска выбранного вами способа конфигурации:
config - традиционный способ конфигурирования. Программа выводит параметры конфигурации по одному, предлагая вам установить для каждого из них свое значение. Вызывается командой
make configoldconfig - файл конфигурации создаётся автоматически, основываясь на текущей конфигурации ядра. Рекомендуется для начинающих. Вызывается командой
make oldconfigdefconfig - файл конфигурации создаётся автоматически, основываясь на значениях по-умолчанию для данной конкретной архитектуры. Вызывается командой
make defconfigmenuconfig - псевдографический интерфейс ручной конфигурации, не требует последовательного ввода значений параметров. Рекомендуется для использования в терминале. Вызов:
make menuconfiggconfig и xconfig - графические конфигураторы для ручной настройки. Вызов:
make gconfigmake xconfigсоответственно
localmodconfig и localyesconfig - автоматические конфигураторы. Конфиг создается на основе вызванных в данных момент модулей и запущенного ядра. Разница между этими двумя конфигураторами в количестве модулей. В первом случае их будет не менее 50% ядра, а во-втором не больше 2 модулей. Вызов:
make localmodconfigmake localyesconfigсоответственно
После вызова соответствующая программа конфигурации будет запущена. Произведите необходимые настройки в соответствии с вашими потребностями, сохраните файл конфигурации и переходите к следующему шагу.
Шаг 5. Сборка ядра
Итак, приготовления завершены. Теперь можно запустить процесс сборки ядра. Чтобы это сделать, выполните команду:
fakeroot make-kpkg -j 5 --initrd --append-to-version=-custom kernel_image kernel_headers #-j +1Сборка ядра может занимать от 20 минут до нескольких часов в зависимости от конфигурации ядра и технических параметров компьютера. Сборка при многодерном процессоре может быть в несколько раз быстрее
Шаг 6. Установка образов и заголовков ядра
Когда сборка ядра подошла к концу, в вашей домашней папке появятся два deb-пакета. Их и необходимо установить. Для этого выполните команды:
cd ~/ sudo dpkg -i linux-image-2.6.x.y-custom_2.6.x.y-custom-10.00.Custom_arc.deb sudo dpkg -i linux-headers-2.6.x.y-custom_2.6.x.y-custom-10.00.Custom_arc.debгде 2.6.x.y - версия собранного ядра, arc - архитектура процессора (i386 - 32-бит, amd64 - 64-бит).
Если вы не знаете точного названия пакета, выведите список файлов в домашнем каталоге командойls -lи найдите эти самые два пакета.
Шаг 7. Генерация начального RAM-диска
Внимание! Если вы во время сборки ядра добавили ключ –initrd, этот шаг можно пропустить.
Для корректной работы Ubuntu требует наличия образа начального RAM-диска. Чтобы его создать, выполните команду:
sudo update-initramfs -c -k 2.6.x.y-customгде 2.6.x.y - версия собранного ядра.
Шаг 8. Обновление конфигурации загрузчика GRUB
Для того, чтобы новая версия ядра была доступна для выбора при загрузке компьютера, выполните следующую команду:
sudo update-grubФайл menu.lst (для GRUB версии 1) или grub.cfg (для GRUB версии 2) обновится в соответствии с наличием установленных операционных систем и образов ядер.
Этот шаг тоже можно пропустить, потому что во время установки ядра команда update-grub вызывается postinst-скриптом
Шаг 9. Проверка ядра
Сборка и установка ядра успешно выполнены! Теперь перезагрузите компьютер и попробуйте загрузить систему с новым ядром. Чтобы удостовериться, что система запущена с новым ядром, выполните команду
uname -rОна выведет на экран используемую версию ядра.
Если всё сделано правильно, то вы можете удалить архивы с исходным кодом и весь каталог linux-2.6.x.y в вашей домашней папке. Это освободит около 5 ГБ на вашем жёстком диске (размер освобождаемого пространства зависит от параметров сборки).
На этом процесс сборки и установки завершён, поздравляю!
Ссылки
ToDo
Исправить дублирование списка команд make config в двух разделах этой справки (перенести из «Шаг 2: пакеты для компиляции» в «Шаг 4: конфигурация»)
Сборка ядра Linux
Самым основным компонентом операционной системы Linux есть ядро. Именно ядро выступает промежуточным звеном между пользовательскими программами и оборудованием компьютера. Во всех бинарных дистрибутивах не нужно заботиться о сборке и настройке ядра, все уже сделали за нас разработчики дистрибутива. Но если вы хотите установить самую свежую версию ядра или настроить его под себя удалив от туда всё лишнее, вам придется собрать его вручную.
Раньше ядро собирали для того чтобы получить максимальную производительность от своего оборудования, но сейчас, учитывая стремительное увеличение мощности компьютеров увеличение производительности при сборке ядра совсем незаметно. Сейчас сборка ядра может понадобиться пользователям не бинарных дистрибутивов, таких как Gentoo, тем, кто хочет внести некоторые изменения в ядро, получить новую самую свежую версию ядра и, конечно, же тем, кто хочет полностью разобраться в работе своей системы. В этой статье мы рассмотрим как собрать ядро Linux на примере дистрибутива Ubuntu.
Сборка ядра Linux из исходников
Первая часть расскажет как настроить ядро в автоматическом режиме. Так сказать, для тех кто не хочет разбираться как оно работает, кому нужно лишь получить на выходе готовый продукт - собранное ядро. Во второй части мы рассмотрим основные этапы ручной настройки ядра, это процесс сложный, и не быстрый, но я попытаюсь дать основу, чтобы вы могли со всем разобраться сами.
1. Текущая версия ядра
Для того чтобы посмотреть текущую версию ядра, установленную в системе используйте такую команду:
2. Установка необходимых пакетов
Для успешной сборки ядра необходимо убедится, что в вашей системе установлены все пакеты, нужные для сборки ядра и установить недостающие. Для этого выполните команду:
sudo apt install libncurses-dev libncurses dwarves build-essential gcc bc bison flex libssl-dev libelf-dev
После установки пакетов можно переходить к загрузке исходников ядра.
3. Получение исходников ядра
Исходники лучше брать с сайта вашего дистрибутива, если они там есть или официального сайта ядра: kernel.org. В этой статье будет рассмотрена загрузка исходников с kernel.org.
Перед тем как скачивать исходники нужно определиться с версией ядра которую надо собирать. Есть две основных версии релизов - стабильные (stable) и кандидаты в релизы (rc), есть, конечно, еще стабильные с длительным периодом поддержки (longterm), но важно сейчас разобраться с первыми двумя. Стабильные это, как правило, не самые новые, но зато уже хорошо протестированные ядра с минимальным количеством багов. Тестовые - наоборот, самые новые, но могут содержать различные ошибки.
Итак когда определились с версией зайдите на kernel.org и скачайте нужные исходники в формате tarball:
В этой статье будет использована самая новая на данный момент стабильная версия 5.13.7. Полученный с официального сайта архив необходимо распаковать. Для этого перейдите в папку загрузок и выполните команду распаковки:
Затем нужно перейти в папку с распакованными исходниками ядра. Например, для версии 5.13.7 команда будет выглядеть вот так:
4. Текущая конфигурация ядра
Вы можете сами настраивать ядро с нуля, но это, скорее всего, займет очень много времени и точно не для новичков. Поэтому удобнее всего взять текущую конфигурацию ядра и использовать её в качестве базы для сборки нового. Во многих дистрибутивах конфигурация хранится в файле /proc/config.gz. Однако это будет работать только если была включена соответствующая опция ядра. Извлечь такую конфигурацию можно с помощью команды:
zcat /proc/config.gz > .config
Часто поддержка этой возможности отключена. Но в Ubuntu и других современных дистрибутивах, конфигурация ядра находится в папке /boot, в файле с названием config и версия ядра. Если у вас в системе установлено несколько ядер, то будет несколько конфигурационных файлов. Например, config-5.11.0-25-generic:
Для того чтобы скопировать этот конфигурационный файл в папку с исходниками выполните:
cp /boot/config-5.11.0-25-generic .config
5. Автоматическая конфигурация
Полученную конфигурацию необходимо актуализировать до состояния текущего ядра. В новых версиях ядра, обычно, добавляются новые опции, значений которых ещё нет в конфигурации ядра вашего дистрибутива. Для этого есть несколько скриптов. В этой статье будет рассмотрено только два: oldconfig и localmodulesconfig. Первый скрипт позволяет в интерактивном режиме заполнить новые поля конфигурации. Для его запуска в папке с исходниками ядра выполните:
После запуска скрипта вам придется просмотреть все вопросы и ответить на них. Обычно скрипт советует как отвечать и в большинстве случаев можно оставить значение по умолчанию, но если вы сомневаетесь, то можно посмотреть какое значение стоит выбрать в Google. Особое внимание уделяйте пунктам, не отмеченным как NEW, такие настройки не новые и требуют вашего вмешательства.
После ответа на все вопросы можно переходить к следующему шагу. Однако, при таком способе конфигурации ядра останутся включёнными многие ненужные модули, а значит сборка займет много времени, много места на диске (до 20 Гб) и само ядро получится большого размера.
С помощью команды localmodulesconfig можно оптимизировать процесс. Это ответ на вопрос как собрать ядро Linux под свое железо проще всего. Она работает аналогично предыдущей, только в дополнение к этому проверяет какие модули ядра сейчас загружены и оставляет включёнными только их, сборку всех остальных отключает. Такое ядро соберется намного быстрее, да и вопросов, на которые надо будет ответить будет меньше.
Здесь обратите внимание на алгоритм сжатия модулей ядра. Лучше оставить без сжатия:
6. Ручная настройка ядра
После того как вы выполнили один из автоматических скриптов настройки ядра, вы можете захотеть настроить что-то дополнительно вручную. Для этого используется команда menuconfig. Она позволяет изменять настройки ядра в псвевдографическом меню. Для его запуска выполните:
Для перемещения по меню используйте клавиши со стрелками вверх и вниз. Для включения или отключения функции нужно поставить на неё курсор и нажать у (включить), n (отключить), m (включить в виде модуля). Её можно использовать пробел или Enter для переключения состояния включено или выключено. Для открытия пункта конфигурации используйте Enter. Для перехода на уровень выше - Exit. Для перемещения между кнопками используйте стрелки вправо и влево. Всё это написано в окне меню:
Давайте рассмотрим несколько настроек. В разделе General Setup можно включить поддержку получения конфигурации из файла /proc/config.gz. Для этого найдите пункты Kernel .config support и Enable access to .config through /proc/config.gz и поставьте перед ними звездочку с помощью клавиши Enter.
По каждому пункту можно получить справку. Для этого выберите кнопку Help и нажмите Enter:
С помощью пункта Kernel compression mode вы можете выбрать способ сжатия образа ядра. Самый эффективный - LZMA:
Пункт Support for paging of anonymous memory (swap) позволяет включить поддержку подкачки:
Возвращайтесь назад с помощью кнопки Exit, а затем откройте пункт File systems. Здесь можно включить или отключить поддержку файловых систем. Убедитесь, что включена поддержка ext4 и ext3, а также можете включить Btrfs и F2FS:
Самый большой и сложный раздел - это Device drivers в главном меню. Здесь можно включить или отключить поддержку драйверов всех устройств которые поддерживает Linux. Именно в этом разделе вам придется внести большинство настроек если вы собираетесь уменьшить размер своего ядра и не хотите использовать localmodconfig. После завершения настройки нажмите кнопку Save и подтвердите сохранение в файл .config:
6. Сборка ядра и установка вручную
Если вы хотите установить ядро вручную достаточно выполнить такие команды последовательно для его сборки:
По умолчанию будет использоваться только одно ядро процессора. Вы можете ускорить сборку попросив программу использовать сразу несколько ядер с помощью опции -j. Например, для сборки в 8 потоков используйте такую команду:
После завершения выполнения этих команд сборка ядра Linux будет завершена, дальше необходимо установить ядро. Для этого выполните:
Скрипт автоматически обновит конфигурацию Grub и вы сможете перезагрузить компьютер и получить новое ядро:
Но прежде чем идти дальше, давайте рассмотрим ещё один способ сборки ядра.
7. Сборка пакета для Ubuntu
Описанный выше способ установки не очень удобный, поскольку если вы захотите удалить ядро, вам придется это делать вручную. Вместо этого вы можете собрать пакет для своего дистрибутива и установить его с помощью пакетного менеджера. Для сборки deb пакета выполните такую команду:
После завершения сборки ядра Linux пакеты появятся на каталог выше каталога с исходниками:
Для установки этих пакетов достаточно выполнить такую команду:
sudo dpkg -i ../*.deb
Затем вы можете перезагрузить компьютер и убедиться, что теперь используется новое ядро:
Для удаления ядра, установленного таким способом достаточно загрузится с другим ядром и удалить пакеты ядра из системы. Например, для этой версии команда будет выглядеть так:
sudo apt remove linux-headers-5.13.7 linux-image-5.13.7 linux-image-5.13.7-dbg linux-libc-dev
Что делать если ядро не загружается
Если по каким-либо причинам собранное только что ядро не загружается, то ничего страшного ещё не произошло. Вы можете загрузиться со старым ядром и начать всё сначала или удалить новое ядро и продолжить использовать систему со старым ядром. Для этого в меню Grub необходимо выбрать пункт Дополнительные параметры, а потом нужную версию ядра, например: 5.11.0.25:
Если меню Grub не отображается, попробуйте зажать перед загрузкой операционной системы клавишу Shift. После авторизации в системе вы можете удалить новое ядро с помощью пакетного менеджера, если использовали его для установки или вручную. Для удаления вручную следует удалить файлы ядра из папки /boot. Например:
sudo rm /boot/vmlinuz-5.13.7
sudo rm /boot/config-5.13.7
sudo rm /boot/initrd.img-5.13.7
sudo rm /boot/System.map-5.13.7
sudo rm -Rf /lib/modules/5.13.7/А затем необходимо обновить конфигурацию Grub:
После этого в вашей системе останутся только старые ядра.
Выводы
Вот и все. В этой статье мы подробно рассмотрели выполняется сборка ядра Linux из исходников. Это будет полезно всем желающим лучшие понять свою систему, и тем, кто хочет получить самую новую версию ядра в своей системе. Если остались вопросы, задавайте комментарии!