Kernel/Upgrade/ru

Эта статья ядра Linux.]]

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

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

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

Kernel upgrade in Gentoo involves these steps:
 * Step 1: Emerging the new kernel sources.
 * Step 2: Setting the right symlink to the new kernel.
 * Step 3: Moving to the new kernel's folder.
 * Step 4: Adjusting the file for the options introduced to, or removed from the new kernel's configuration.
 * Step 5: Building the kernel and the initramfs.
 * Step 6: Updating the bootloader.
 * Step 7: Removing or keeping the old kernel.

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

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

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

Конфигурация
The kernel configuration is saved in a file named in the directory that holds the kernel sources, a symlink is used to point to that directory.

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


 * 1) Установка исходного кода ядра с
 * 2) Настройка ссылки с помощью eselect
 * 3) Ручное обновление символьной ссылки

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

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

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

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

Установка исходного кода ядра с USE-флагом symlink
Это заставит ссылаться на свежеустановленный исходный код ядра.

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

Moving to the new kernel folder
Now that the symbolic link has been modified, change the working directory to the new kernel folder.

Copy the previous kernel configuration
Конфигурацию от старого ядра необходимо скопировать в новое. Вдобавок к резервной копии в из шага ранее, ее можно найти в нескольких местах:


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


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


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


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


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

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

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

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

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

make olddefconfig
Если новые опции должны быть оставлены как они рекомендуются (по умолчанию), то тогда используйте :

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

Observing the difference
A diff tool can be used to compare the old and new files to see what options have been added:

And which have been removed:

Alternatively, the kernel provides a script to cleanly compare two config files even if the options have moved in the file itself:

make menuconfig
The options can then be researched and changed if necessary by running:

The menuconfig target is helpful because it safely handles kernel symbol dependency resolution.

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

Автоматическая сборка и установка
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)  is able to build and install the kernel to which the  symlink points into   and the bootloader.
 * 2) The   use flag is set for the kernel ebuild.

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

Переустановка внешних модулей ядра
Все внешние модули ядра, такие как binary kernel modules, необходимо перекомпилировать для каждого нового ядра. Если ядро еще не собрано, оно должно сперва быть подготовлено для компиляции его внешних модулей:

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

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

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

After making sure partition is mounted,

Using grub-mkconfig
The following command can be executed for updating grub's configuration file:

Using systemd-boot-gen to update systemd-boot UEFI configuration
Manual installation of :

Copy the kernel parameters to, the file should contain:

And run it using root privileges:

This will generate the boot configuration in for all the available  that have a matching.

Keeping the old kernel sources
Kernel sources will eventually become unsupported. Some packages require the current sources to build. To protect the new sources from being removed by a depclean, it can be added to the world file (/var/lib/portage/world) by:

Old sources that are no longer supported can be removed from the world file by:

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

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

 * kernel changelog with some explanations of new features