Как изменить ядро линукс

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

В последнее время новые версии ядер выходят достаточно часто. Раз в несколько месяцев выходит стабильный релиз. Ну а нестабильные кандидаты в релизы выходят и того чаще. Линус Торвальдс и множество разработчиков по всему миру постоянно работают над улучшением новых ядер и добавлением в них все больше и больше функциональности.

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

Если вам нужна более подробная информация об изменениях в какой-то определенной версии ядра смотрите ее Changelog на kernel.org, а в этой статье мы рассмотрим обновление ядра Linux до самой новой версии. Я попытаюсь не привязывать инструкцию к определенной версии ядра, новые ядра выходят достаточно часто и она будет актуальна для каждого из них. Рассмотрим обновление ядра Ubuntu и CentOS. Сначала давайте рассмотрим как обновить ядро в Ubuntu.

Обновление ядра Ubuntu вручную

Давайте сначала посмотрим какое ядро у вас установлено. Для этого откройте терминал и выполните:

uname -r

Например, у меня сейчас используется версия 5.4, и я могу обновиться к самой новой версии. Разработчики Ubuntu уже позаботились о том чтобы их пользователи не собирали ядро вручную и сделали deb пакеты новой версии ядра. Их можно скачать с официального сайта Canonical.

Я мог бы привести здесь команды wget для загрузки, если была бы известна версия ядра, но в нашем случае лучше будет использовать браузер. Откройте сайт http://kernel.ubuntu.com/~kernel-ppa/mainline/. Здесь находятся все, собираемые командой Ubuntu ядра.

Пролистайте вниз, именно там находятся более новые версии ядер:

Кроме того, в самом верху есть папка daily/current, в которой находятся самые свежие, ночные сборки ядер. Выберите нужную версию ядра, затем выберите архитектуру. Для 64-битных систем вам понадобится архитектура amd64:

Далее надо скачать четыре файла: два linux-headers, linux-image и linux-modules. Как видите, там есть несколько типов ядер: lowlatency и generic. Ядро lowlatency судя из названия имеет более низкие задержки при работе с прерываниями. Зато ядро generic имеет большую пропускную способность. В большинстве случаев достаточно ядра generic. Скачайте linux-headers для all и generic, а также linux-image-generic и linux-modules-generic:

После завершения загрузки можно переходить к установке. Перейдите в папку с установочными пакетами, например, ~/Downloads:

cd ~/Downloads

Запустите установку:

dpkg -i linux-headers* linux-image* linux-modules*

Если эта команда не сработала, можно пойти другим путем. Установите утилиту gdebi:

sudo apt install gdebi

Затем с помощью нее установите ядро:

sudo gdebi linux-headers*.deb linux-image-*.deb linux-modules-*.deb

Ядро установлено, осталось обновить загрузчик:

sudo update-grub

Теперь можно перезагружать компьютер и смотреть что получилось. После перезагрузки убедимся, что обновление ядра Linux до самой новой версии прошло успешно:

uname -r

Как видите ядро успешно установлено и работает. Но не спешите удалять старую версию ядра, рекомендуется иметь несколько версий ядра в системе, чтобы в случае неполадок иметь возможность загрузиться со старой рабочей версии. Если вы хотите настроить автоматическое обновление ядра в Ubuntu — используйте утилиту UKKU.

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

А чтобы восстановить работу системы выберите пункт Advanced options for Ubuntu в меню Grub:

kernel12

И запустите предыдущее работающее ядро:

kernel13

После загрузки останется удалить неверно установленное ядро и еще раз обновить Grub. Найдите точное имя пакета ядра с помощью apt search. Например:

sudo apt search linux-headers-5.8

Затем удалите этот пакет:

sudo apt remove linux-headers-5.8-000055-generic

Аналогично надо поступить с ядром. После этого обновите конфигурацию Grub:

sudo update-grub

Теперь ваша система вернулась к прежнему состоянию. Вы можете попробовать устанавливать более старую версию ядра или попробовать еще раз.

Обновление ядра Linux до в CentOS

А теперь давайте рассмотрим как обновить ядро Linux самой новой версии в CentOS. Инструкция проверена на CentOS 8, но скорее всего, будет работать и на RHEL 8, Fedora и других подобных дистрибутивах.

Как правило, новые ядра не включены в официальные репозитории CentOS, поэтому чтобы получить последнюю стабильную версию нам необходимо будет добавить репозиторий ELRepo. Это репозиторий коммерческих пакетов (Enterprise Linux Packages) он также поддерживается в RHEL и Fedora.

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

sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

Для того чтобы добавить репозиторий и необходимые компоненты в RHEL 7 и CentOS 7 выполните:

sudo yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

В CentOS 8 выполните:

sudo dnf install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm

В CentOS 6:

sudo yum install https://www.elrepo.org/elrepo-release-6.el6.elrepo.noarch.rpm

Готово, теперь посмотрим текущую версию ядра:

uname -r

Можем устанавливать самую новую версию ядра Linux командой:

sudo yum --enablerepo=elrepo-kernel install kernel-ml

Пакет kernel-ml, это текущий стабильный mainline релиз, на данный момент, это 5.8. После того как установка нового ядра Linux завершена, обновите конфигурационный файл загрузчика:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Затем можете перезагружать систему. Обновление ядра в CentOS завершено.

Если после перезагрузки у вас возникли какие-либо проблемы с новым ядром, просто удалите его с помощью команды:

yum remove kernel-ml -y

Или:

dnf remove kernel-ml -y

И перезагрузите компьютер, чтобы вернуть систему к прежнему состоянию.

Выводы

В этой инструкции мы рассмотрели как обновить ядро Linux до 4.4 в Ubuntu и CentOS, но мы говорили только об обновлении ядра из бинарников. Также можно собрать ядро из исходных кодов, которые доступны для загрузки на официальном сайте ядра. О сборке ядра Linux я писал в отдельной статье. Вроде все разобрали, если остались вопросы — пишите в комментариях.

Creative Commons License

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

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

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

Эта статья не объясняет как патчить ваше ядро, только как изменить текущее. Я попробую объяснить как пропатчить ядро в следующих статьях, и какие практические причины могут быть для этог.

Для начала, вам нужно посмотреть какая версия ядра у вас сейчас. Используйте для этого команду uname:

$ uname -r
2.6.17-10-generic

Теперь вам необходимо установить исходные коды Linux для вашего ядра, обратите внимание что у меня ядро 2.6.17-10. Вы можете заменить номер ядра на тот, который используется у вас. Вам также необходимо установить библиотеки и некоторые дополнительные программы, которые помогут вам при компиляции.

sudo apt-get install linux-source-2.6.17 kernel-package libncurses5-dev fakeroot

Если вам любопытно куда инсталлируются исходные коды ядра, вы можете использовать команду dpkg, которая расскажет вам это. Ниже вывод с моей системы:

$ dpkg -L linux-source-2.6.17
/.
/usr
/usr/src
/usr/src/linux-source-2.6.17.tar.bz2
/usr/share
/usr/share/doc
/usr/share/doc/linux-source-2.6.17 
(trimmed)

Вы можете увидеть что исходники устанавливаются в директории /usr/src в архивированном файле.

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

sudo /bin/bash

Теперь смените директорию. Заметьте что вам необходимо установить утилиту bunzip если её нет в вашей системе.

cd /usr/src
bunzip2 linux-source-2.6.17.tar.bz2
tar xvf linux-source-2.6.17.tar
ln -s linux-source-2.6.17 linux

Сделайте копию текущей конфигурации ядра перед изменением. Обратите внимание, что символ `находиться под символом тильда ~.

cp /boot/config-`uname -r` /usr/src/linux/.config

Теперь мы можем запустить утилиту, которая позволит нам изменить ядро:

cd /usr/src/linux
make menuconfig

Сперва, перейдем в меню Load an Alternate Configuration File, и загрузим файл .config (просто нажав enter).

Теперь находясь внутри утилиты, мы можем установить опции для настройки ядра. Навигация очень простая. Я решил выбрать Networking и нажал клавишу Enter для перехода в эту категорию:

Amateur Radio Support? Зачем мне это? Вы можете видеть символ *, который означает что это есть в ядре.

Нажав клавишу ?, вы перейдете в справку для выбранного элемента:

Итак, я собираюсь отключить это немедленно. Зачем вообще это установлено в моем ядре? Я нажимаю Esc для выхода из окна справки, и потом нажму N для удаления этого элемента из ядра.

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

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

make-kpkg clean

Далее мы действительно компилируем ядро. Это делается чертовски долго, так что пойдите займитесь чем нибудь ещё.

fakeroot make-kpkg –initrd –append-to-version=-custom kernel_image kernel_headers

Этот процесс создаст два .deb файла в директории /usr/src. Файл linux-image**** содержит актуальный образ ядра, а другой файл содержит измененный. Имена файлов могут быть отличными в вашей системе.

Пожалуйста обратите внимание что когда вы запустите следующие команды, вы установите новое ядро как ядро по умолчанию. Это может разрушить вашу систему. Если ваша машина не загружается, вы можете нажать Esc и меню загрузки GRUB и выбрать старое ядро. Вы можете заблокировать неверное ядро в /boot/grub/menu.lst и попробовать скомпилировать его заново.

dpkg -i linux-image-2.6.17.14-ubuntu1-custom_2.6.17.14-ubuntu1-custom-10.00.Custom_i386.deb
dpkg -i linux-headers-2.6.17.14-ubuntu1-custom_2.6.17.14-ubuntu1-custom-10.00.Custom_i386.deb

Теперь перегрузите вашу машину. Если все работает, должно загрузиться новое измененное ядро. Проверьте это, испольльзуя uname.

uname -r
2.6.17.14-ubuntu1-custom

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

Эта статья описывает шаги необходимые для обновления ядра Linux.

Сборка нового ядра из свежего исходного кода является практически тем же процессом, как и во время установки системы. Разница заключается в том, что для экономии времени можно конвертировать конфигурацию от старого ядра под изменения, сделанные в новом ядре, вместо того, чтобы снова устанавливать все опции (например, с помощью make menuconfig).

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

Эта статья демонстрирует, как обращаться с такими изменениями файла конфигурации путём конвертации старой конфигурации в конфигурацию, пригодную для нового ядра.

Обновления ядра в Gentoo включает следующие шаги:

  • Шаг 1: Установка нового исходного кода ядра.
  • Шаг 2: Установка символьной ссылки на новый исходный код ядра.
  • Шаг 3: Вход в каталог с новым ядром.
  • Шаг 4: Настройка файла .config для опций, которые были удалены или добавлены в конфигурацию нового ядра.
  • Шаг 5: Сборка ядра и initramfs.
  • Шаг 6: Обновление загрузчика.
  • Шаг 7: Удаление или сохранение старого ядра.

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

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

Для обновление ядра в начале нужно установить новый исходный код ядра. Этот исходный код иногда устанавливается в результате обновления системы при запуске следующей команды:

root #emerge --ask --update --deep --with-bdeps=y --newuse @world

Конечно, исходный код ядра можно установить напрямую, используя команду (замените gentoo-sources на любую версию ядра, которую используете):

root #emerge --ask --update --deep --with-bdeps=y --newuse sys-kernel/gentoo-sources

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

Установка символьной ссылки на новый исходный код ядра

Конфигурация ядра сохранена в файле .config, в каталоге с исходным кодом ядра.

Символьная ссылка /usr/src/linux должна всегда указывать на каталог, в котором находится исходный код используемого в настоящий момент ядра. Это может быть сделано одним из трех способов:

  1. По умолчанию: Настройка ссылки с помощью eselect
  2. Альтернатива 1: Ручное обновление символьной ссылки
  3. Альтернатива 2: Установка исходного кода ядра с USE="symlink"

По умолчанию: Настройка символьной ссылки с помощью eselect

Для настройки символьной ссылки с помощью eselect:

user $eselect kernel list

Available kernel symlink targets:
 [1] linux-3.14.14-gentoo *
 [2] linux-3.16.3-gentoo

Это вывод доступных исходных кодов ядра. Звездочка указывает на выбранный исходный код.

Для выбора исходного кода ядра, например, второго в списке, выполните:

root #eselect kernel set 2

Альтернатива 1: Изменение символьной ссылки вручную

Для изменения символьной ссылки вручную:

root #ln -sf /usr/src/linux-3.16.3-gentoo /usr/src/linux

user $ls -l /usr/src/linux

lrwxrwxrwx 1 root root 19 Oct  4 10:21 /usr/src/linux -> linux-3.16.3-gentoo

Альтернатива 2: Установка исходного кода ядра с USE-флагом symlink

Это заставит /usr/src/linux ссылаться на свежеустановленный исходный код ядра.

Если необходимо, это можно изменить одним из двух методов.

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

После того, как была изменена символьная ссылка, смените рабочую директорию на каталог с новым ядром.

Заметка
Эта команда необходима, даже если вы уже находились в каталоге /usr/src/linux, когда изменялась символьная ссылка. Пока вы не перезайдете в каталог, консоль всё ещё будет в каталоге старого ядра.

Конвертация файла .config для нового ядра

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

Конфигурацию от старого ядра необходимо скопировать в каталог с новым. Старую конфигурацию можно найти в нескольких местах:

  • В файловой системе procfs, если параметр ядра Enable access to .config through /proc/config.gz был включен в работающем на данный момент ядре:

root #zcat /proc/config.gz > /usr/src/linux/.config

  • Из старого ядра. Такое будет работать только в случае, если старое ядро было собрано с CONFIG_IKCONFIG:

root #/usr/src/linux/scripts/extract-ikconfig /path/to/old/kernel >/usr/src/linux/.config

  • В каталоге /boot, если туда был установлен конфигурационный файл:

root #cp /boot/config-3.14.14-gentoo /usr/src/linux/.config

  • В каталоге ядра, которое работает на данный момент:

root #cp /usr/src/linux-3.14.14-gentoo/.config /usr/src/linux/

  • В каталоге /etc/kernels/, если SAVE_CONFIG="yes" настроено в /etc/genkernel.conf и ядро было собрано с помощью genkernel:

root #cp /etc/kernels/kernel-config-x86_64-3.14.14-gentoo /usr/src/linux/.config

Обновление файла .config

Заметка
Комманды make oldconfig и make menuconfig могут вызываться автоматически с помощью genkernel во время сборки, если вы включите параметры OLDCONFIG и MENUCONFIG в файле /etc/genkernel.conf. Если вы включили параметр OLDCONFIG в конфигурации genkernel или с помощью параметра —oldconfig комманды genkernel, перейдите к разделу с сборкой.

Новое ядро обычно требует новый файл .config для поддержки новых опций ядра. Файл .config с предыдущего ядра может быть сконвертирован для использования новым ядром. Конвертация может быть выполнена несколькими способами, например, с помощью команд make oldconfig или make olddefconfig.

make oldconfig

Важно
make syncconfig стал частью внутреннего устройства; по возможности используйте make oldconfig. make silentoldconfig был удален, начиная с ядра Linux версии 4.19.

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

root #make oldconfig

Anticipatory I/O scheduler (IOSCHED_AS) [Y/n/m/?] (NEW)

Надпись (NEW) в конце строки означает, что это новая опция. В левой части, в квадратных скобках, указаны возможные ответы: Yes, no, module или ? для справки. Рекомендуемый ответ (т.е. по умолчанию) написан большими буквами (здесь Y). В справке дано пояснение к опции или драйверу.

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

make olddefconfig

make olddefconfig оставит все настройки с старого файла .config, и установит новые настройки в их рекомендуемое значение (т.е. в значение по умолчанию):

make help

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

Наблюдение различий

Инструмент diff может быть использован для сравнения старого и нового файла .config, чтобы просмотреть вновь добавленные опции:

user $diff <(sort .config) <(sort .config.old) | awk '/^<.*(=|Linux)/ { $1=""; print }'

CONFIG_64BIT_TIME=y
CONFIG_AMD_NB=y
CONFIG_ARCH_CLOCKSOURCE_INIT=y
CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
CONFIG_ARCH_HAS_PTE_DEVMAP=y
CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
CONFIG_ARCH_STACKWALK=y
CONFIG_ARCH_USE_MEMREMAP_PROT=y
CONFIG_BLK_PM=y
CONFIG_CC_CAN_LINK=y
CONFIG_CC_DISABLE_WARN_MAYBE_UNINITIALIZED=y
CONFIG_CC_HAS_ASM_INLINE=y
CONFIG_CC_HAS_KASAN_GENERIC=y
CONFIG_CC_HAS_WARN_MAYBE_UNINITIALIZED=y
CONFIG_CPU_SUP_AMD=y
CONFIG_CPU_SUP_HYGON=y
CONFIG_CPU_SUP_ZHAOXIN=y
CONFIG_CRYPTO_LIB_AES=y
CONFIG_CRYPTO_LIB_ARC4=y
CONFIG_CRYPTO_LIB_DES=y
CONFIG_CRYPTO_LIB_SHA256=y
CONFIG_DEBUG_MISC=y
CONFIG_DRM_I915_FORCE_PROBE=""
CONFIG_DRM_I915_SPIN_REQUEST=5
CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND=250
CONFIG_DYNAMIC_EVENTS=y
CONFIG_EFI_EARLYCON=y
CONFIG_GCC_PLUGINS=y
CONFIG_GENERIC_GETTIMEOFDAY=y
CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y
CONFIG_HAVE_ARCH_STACKLEAK=y
CONFIG_HAVE_ASM_MODVERSIONS=y
CONFIG_HAVE_EISA=y
CONFIG_HAVE_FAST_GUP=y
CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y
CONFIG_HAVE_GENERIC_VDSO=y
CONFIG_HAVE_MOVE_PMD=y
CONFIG_HAVE_PCI=y
CONFIG_INIT_STACK_NONE=y
CONFIG_IO_URING=y
CONFIG_KASAN_STACK=1
CONFIG_LEDS_TRIGGER_AUDIO=y
CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity"
CONFIG_MMC_SDHCI_IO_ACCESSORS=y
CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m
CONFIG_NET_VENDOR_GOOGLE=y
CONFIG_NET_VENDOR_MICROCHIP=y
CONFIG_NET_VENDOR_PENSANDO=y
CONFIG_NET_VENDOR_XILINX=y
CONFIG_NF_NAT=m
CONFIG_NF_NAT_MASQUERADE=y
CONFIG_NVMEM_SYSFS=y
CONFIG_OPTIMIZE_INLINING=y
CONFIG_POWER_SUPPLY_HWMON=y
CONFIG_PROC_PID_ARCH_STATUS=y
CONFIG_SKB_EXTENSIONS=y
CONFIG_SND_INTEL_NHLT=y
CONFIG_UBSAN_ALIGNMENT=y
CONFIG_UNIX_SCM=y
CONFIG_USB_AUTOSUSPEND_DELAY=2
CONFIG_X86_ACPI_CPUFREQ_CPB=y
CONFIG_X86_MCE_AMD=y
# end of Gentoo Linux
# Linux/x86 5.4.0-gentoo Kernel Configuration

И какие были удалены:

user $diff <(sort .config) <(sort .config.old) | awk '/^>.*(=|Linux)/ { $1=""; print }'

CONFIG_ANON_INODES=y
CONFIG_ARCH_DISCARD_MEMBLOCK=y
CONFIG_ARCH_HAS_SG_CHAIN=y
CONFIG_ARCH_HAS_ZONE_DEVICE=y
CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
CONFIG_ARM_GIC_MAX_NR=1
CONFIG_AUDIT_TREE=y
CONFIG_AUDIT_WATCH=y
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_CRYPTO_WORKQUEUE=y
CONFIG_DEFAULT_CFQ=y
CONFIG_DEFAULT_IO_DELAY_TYPE=0
CONFIG_DEFAULT_IOSCHED="cfq"
CONFIG_DEFAULT_SECURITY=""
CONFIG_DMA_DIRECT_OPS=y
CONFIG_FB_BACKLIGHT=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
CONFIG_HAVE_GENERIC_GUP=y
CONFIG_HAVE_MEMBLOCK=y
CONFIG_IA32_AOUT=y
CONFIG_INET6_XFRM_MODE_BEET=y
CONFIG_INET6_XFRM_MODE_TRANSPORT=y
CONFIG_INET6_XFRM_MODE_TUNNEL=y
CONFIG_INET_XFRM_MODE_TRANSPORT=y
CONFIG_INET_XFRM_MODE_TUNNEL=y
CONFIG_IO_DELAY_TYPE_0X80=0
CONFIG_IO_DELAY_TYPE_0XED=1
CONFIG_IO_DELAY_TYPE_NONE=3
CONFIG_IO_DELAY_TYPE_UDELAY=2
CONFIG_IOSCHED_CFQ=y
CONFIG_IOSCHED_NOOP=y
CONFIG_MAY_USE_DEVLINK=y
CONFIG_NO_BOOTMEM=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_X86_DEV_DMA_OPS=y
# Linux/x86 4.19.86-gentoo Kernel Configuration

Так же, ядро предоставляет скрипт для точного сравнения двух файлов, даже, если опции уже были добавлены в файл:

user $/usr/src/linux/scripts/diffconfig .config.old .config

После этого опции могут быть изучены и изменены при необходимости коммандой:

Цель menuconfig полезна тем, что она безопасно управляет зависимостями опций от других опций.

Сборка

Важно
Когда установлены внешние модули ядра (например, nvidia или zfs), возможно, необходимо выполнить make modules_prepare, как написано ниже, перед тем, как собрать ядро. Некоторые модули не могут быть установлены или подготовлены до того, как будет собрано ядро.

Важно
Не забудьте перенастроить загрузчик для нового ядра, и пересобрать initramfs, если он используется.

На этом шаге следуйте инструкциям статьи ручная конфигурация.

Автоматическая сборка и установка

It is possible to automatically build and install the newly emerged kernel using Portage hooks. While other approaches are also possible, the following is based on genkernel and gentoo-sources package. It requires the following prerequisites:

  1. genkernel all is able to build and install the kernel to which the /usr/src/linux symlink points into $BOOTDIR and the bootloader.
  2. The symlink use flag is set for the kernel ebuild.

If those are fulfilled, simply install a post_pkg_postinst Portage hook as shown below.

Файл /etc/portage/env/sys-kernel/gentoo-sourcesAutomated kernel build and installation portage hook

post_pkg_postinst() {
# Eselect the new kernel or genkernel will build the current one
	eselect kernel set linux-"${PV}"-gentoo
	CURRENT_KV=$(uname -r)
# Check if genkernel has been run previously for the running kernel and use that config
	if [[ -f "${EROOT}/etc/kernels/kernel-config-${CURRENT_KV}" ]] ; then
		genkernel --kernel-config="${EROOT}/etc/kernels/kernel-config-${CURRENT_KV}" all
# Use latest kernel config from current kernel
	elif [[ -f "${EROOT}/usr/src/linux-${CURRENT_KV}/.config" ]] ; then
		genkernel --kernel-config="${EROOT}/usr/src/linux-${CURRENT_KV}/.config" all
# Use known running good kernel
	elif [[ -f /proc/config.gz ]] ; then
		zcat /proc/config.gz >> "${EROOT}/tmp/genkernel.config"
		genkernel --kernel-config="${EROOT}/tmp/genkernel.config" all
		rm "${EROOT}/tmp/genkernel.config"
# No valid configs known, compile a clean one
	else
		genkernel all
	fi
}

Переустановка внешних модулей ядра

Заметка
Этап modules_prepare не требуется, если вы собираете всё ядро, так как эта функция выполняется как часть этого процесса обычной сборки.

Все внешние модули ядра, такие как двоичные (binary) модули ядра, необходимо пересобрать для каждого нового ядра. Если ядро ещё не собрано, оно должно быть подготовлено для сборки его внешних модулей:

root #make modules_prepare

Пакеты с модулями ядра можно пересобрать заново, используя набор @module-rebuild:

root #emerge --ask @module-rebuild

Решение проблем сборки

Если возникают проблемы при пересборке текущего ядра, то может помочь очистка исходного кода ядра. Удостоверьтесь, что сохранили файл .config, так как данная операция удалит его. Удостоверьтесь, что не используется окончание файла .bak или ~ для бэкапа, так как make distclean очищает и такие файлы.

root #cp .config /usr/src/kernel_config_bk

root #make distclean

root #mv /usr/src/kernel_config_bk .config

Обновление загрузчика

The upgraded and built kernel needs to be set up and eventually a bootloader or boot item updated, see Kernel/Configuration#Setup. Users of Grub can use the method below, users of other bootloaders must consult the handbook.

After making sure /boot partition is mounted,

Использование grub-mkconfig

The following command can be executed for updating grub’s configuration file:

root #grub-mkconfig -o /boot/grub/grub.cfg

Using systemd-boot-gen to update systemd-boot UEFI configuration

Предупреждение
Installing from cargo, the Rust package manager, should be done at one’s own risk. The Gentoo project cannot verify what is built from it and could contain security risks particularly at the bootloader level. This could mean installing a rootkit if compromised. Proceed with the following section with caution.

Manual installation of systemd-boot-gen:

user $cargo install systemd-boot-gen

Copy the kernel parameters to /etc/default/cmdline, the file should contain:

Файл /etc/default/cmdline

CMDLINE="<kernel command line parameters>"

И запустите, используя права администратора:

user $sudo ~/.cargo/bin/systemd-boot-gen

This will generate the boot configuration in /boot/loader/entries/ for all the available /boot/vmlinuz-* that have a matching /boot/initramfs-*.

Сохранение или удаление старого ядра

Сохранение старого исходного кода ядра

Исходные коды ядра постепенно становятся неподдерживавыми. Некоторым пакетам необходим текущий код для сборки. Чтобы защитить новую версию от удаления с помощью depclean, можно добавить его в набор world (файл /var/lib/portage/world) так:

root #emerge --noreplace sys-kernel/gentoo-sources:здесь.новая.версия

Старые версии, который больше не поддерживаются, могут быть удалены из набора world:

root #emerge --deselect sys-kernel/gentoo-sources:здесь.ненужная.версия

Удаление старого ядра

Смотрите статью Удаление ядра.

Смотрите также

  • Genkernel — утилита созданная Gentoo, которая используется для автоматизации процесса сборки ядра и initramfs.
  • Dracut — an initramfs infrastructure and aims to have as little as possible hard-coded into the initramfs.
  • Kernel/Configuration — описывает ручную конфигурацию и настройку ядра Linux.
  • Обновление GRUB на новое ядро

Внешние ресурсы

  • Журнал изменений ядра с разьяснениями некоторых новых возможностей

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

Но это не означает, что вы всегда должны использовать последнее основное ядро. Доступно несколько вариантов ядра, и я собираюсь показать вам переключение ядер в Arch Linux.

Для Arch Linux доступны разные типы ядер

Во-первых, позвольте мне рассказать вам о различных типах ядер Linux, доступных вам как пользователю Arch.

Основное ядро ​​(название пакета: linux)

Это последнее стабильное ядро ​​Linux. Большинство людей используют это ядро ​​по той причине, что это последняя доступная версия ядра.

Ядро LTS (название пакета: linux-lts)

В linux-lts Пакет предоставляет вам последнюю версию ядра Linux для долгосрочной поддержки. Для ядра LTS нет предопределенного жизненного цикла, но вы можете быть уверены, что будете пользоваться одной и той же версией ядра в течение гораздо более длительного периода.

Патчи ядра обычно ничего не ломают, но поломка возможна. Если у вас не самое новое оборудование, которое может предложить рынок, вы можете пользоваться новейшим программным обеспечением с повышенной стабильностью, установив немного более старое ядро ​​LTS.

Усиленное ядро ​​(название пакета: linux-hardened)

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

Ядро с настройкой производительности (имя пакета: linux-zen)

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

Как переключить ядра в Arch Linux

Теперь, когда вы знаете о различных вариантах ядра, давайте посмотрим, как изменить ядро ​​в Arch Linux.

Это двухэтапный процесс:

  1. Установите ядро ​​Linux по вашему выбору
  2. Настройте файл конфигурации grub, чтобы добавить недавно установленное ядро

Не волнуйтесь, я подробно покажу вам шаги.

Проверить версию ядра в Arch Linux с помощью этой команды:

uname -r

Если отображается только число

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

Шаг 1. Установите ядро на ваш выбор

Ты можешь используйте команду pacman для установки ядро Linux по вашему выбору. Вам просто нужно знать название пакета.

Вы также можете установить в системе более одного типа ядер Linux одновременно. Вы можете выбрать, какое ядро ​​использовать, из меню grub.

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

sudo pacman -S linux

Для последнего ядра LTS:

sudo pacman -S linux-lts

Для последнего стабильного ядра с усиленными патчами:

sudo pacman -S усиленный Linux

Чтобы получить ядро ​​Zen:

sudo pacman -S linux-zen

Шаг 2. Настройте файл конфигурации grub, чтобы добавить дополнительные параметры ядра.

По умолчанию Arch Linux использует последнюю версию ядра по умолчанию. Дополнительные версии ядра доступны в расширенных параметрах:

В этом варианте доступны дополнительные ядра Linux.

Однако я предпочитаю делать что-то немного по-другому и немного лучше (на мой взгляд). Вот что я делаю:

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

Звучит уже намного лучше, не так ли?

Для этого вам необходимо отредактировать файл конфигурации GRUB. Все файлы конфигурации в целом расположены в каталог / etc.

Откройте свой терминал и отредактируйте файл конфигурации в своем любимом текстовый редактор на основе терминала. я с помощью редактора Nano:

судо нано / и т. д. / по умолчанию / grub

Как вы могли заметить, я изменил упомянутое значение, но добавил еще 2 строки, поэтому окончательный результат должен выглядеть так:

GRUB_DISABLE_SUBMENU = y. GRUB_DEFAULT = сохранено. GRUB_SAVEDEFAULT = правда

Первая и необязательная строка используется для отключить подменю GRUB. Мне легче, когда я сразу вижу все свои ядра на экране GRUB без необходимости заходить в подменю дополнительных параметров.

Вторая строка используется для сохранить последнюю запись ядра.

Наконец, вам нужно убедиться, что GRUB будет использоваться как по умолчанию последняя сохраненная запись.

Сохраните файл конфигурации и выйдите.

Шаг 3. Повторно сгенерируйте файл конфигурации GRUB.

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

$ sudo grub-mkconfig -o /boot/grub/grub.cfg

Если вам это кажется знакомым, вы использовали эту команду во время Процесс установки Arch Linux.

Перезагрузите вашу систему Linux и выберите ядро, которое хотите использовать!

Вывод

Вам не нужно беспокоиться об обновлении ядра в Arch Linux. Если для выбранного вами ядра есть обновления, они будут установлены вместе с обновлениями системы. Я думаю ты уже знаешь как обновить систему Arch Linux.

Переключение ядер в Arch Linux — это простой процесс с несколькими вариантами, адаптированными к вашим потребностям. Я считаю, что описанный выше метод является самым безопасным и простым, так как вам не нужно удалять ядро ​​из вашей системы. Если вы решите запустить последнее ядро, рекомендуется установить ядро ​​LTS на случай паники ядра.

Надеюсь, вам понравился этот совет по Arch Linux. Подпишитесь на рассылку It’s FOSS, чтобы получить больше советов и руководств.

Понравилась статья? Поделить с друзьями:
  • Как изменить ядро gpu
  • Как изменить ядра через биос
  • Как изменить ядерность процессора
  • Как изменить ягодицы правильно
  • Как изменить ява файл