Kernel/Upgrade/zh-cn

这篇文章描述了升级到新内核步骤.

安装 并且使用一个新内核
当安装新的内核源代码后，升级您的内核或许是一个很棒的主意. 当您运行 emerge -a --update --deep --with-bdeps=y --newuse @world 时，新的内核源代码有时会随着系统的更新而安装，或者直接被安装.

安装新的内核源代码并不会给使用者提供一个新的内核. 从新内核源代码编译和安装一个新的内核，然后重启系统从而真正的运行新的内核是有必要的.

从新的源代码制作一个新的内核基本上和安装系统时的制作内核是一样的. 不同之处在于可以基于旧内核的配置文件来为新内核制作一个配置文件. 使用旧的配置文件可以让使用者不从头到尾再做一次内核选项（像 make menuconfig 一样）.

内核的配置文件 保存在内核源代码的目录下面. 一个新的内核或许会旧内核没有的特性或选项，新内核也有可能没有现存于旧内核的特性或选项. 内核配置文件指定了是否开启内核的功能和选项，或许内嵌入内核，或许以模块形式构建从而允许在内核运行需要时被加载. 因此，新内核的配置文件可能有新的但是旧内核的配置文件没有的选项，同时新内核的配置文件可能没有旧内核的配置文件现有的选项.

要处理配置文件的更改，旧内核的配置文件需要转换为可用于新内核的配置. 本文展示了如何通过转换旧内核的配置文件来制作一个新内核.

为当前运行内核的配置文件制作一个备份
备份内核配置是明智的，这样以前的配置就不会丢失了. 毕竟许多用户花了大量的时间来配置出系统的最佳配置，同时失去内核配置是绝对不会想要的.

制作一个当前内核配置的备份很容易：

在内核源代码的链接被配置正确的情况下，这复制了正在使用的内核的配置文件到了根用户的家目录下，重命名了配置文件变成 加上现在正在运行的内核的版本号.

设置一个链接到新的内核源代码
符号链接 应该始终指向正在运行的内核的源代码的目录. 下面三种方法中任意一个可以实现这一点：


 * 1) 安装内核源代码时使用
 * 2) 用 eselect 设置链接
 * 3) 手动更新符号链接

安装使用 USE Flag 的内核源代码
这将会让 指向新安装的内核源代码.

如果有必要的话，也可以选择下面两种方法之一来进行稍后修改.

使用 eselect 设置链接
用 eselect 设置链接：

这将输出可用的内核源代码. 星号表示已经选择的来源.

要更改内核源，例如选第二个选项：

手动更新符号链接
手动设置符号链接：

复制以前的内核配置文件
旧内核的配置需要被复制到新的内核中. 它可以在这几个地方找到：


 * 如果在当前内核中选项Enable access to .config through /proc/config.gz是激活的，配置文件在procfs 文件系统：


 * 目录,如果你把配置文件安装到了这里:


 * 当前运行的内核的源代码目录：

配置新的内核
To use the configuration of the old kernel with the new kernel, it needs to be converted. The conversion can be done by running either or. Use either, not both.

制作沉默的旧的配置 (make silentoldconfig)
下面的配置是基于类似文本的配置 make config. 对于新的配置，它提供选择. 例如：

字符串“（NEW）”在该行结束时标记该选项是新的. 左边的方括号中的字符串是可能的答案：“Y”是，“N”不是，“m”模块，或者“？”显示帮助. 推荐答案是大写（“Y”）. 帮助说明解释了选项或驱动程序.

可惜 make silentoldconfig 不会在帮助后面为每一个选项显示太多的信息，例如上下文，因此有时候做出正确的选择比较困难. 这种情况下最好的办法就是记住选项的名字，之后通过 graphical kernel configuration tools 重新修正.

制作旧的配置 (make olddefconfig)
如果不想要互动性（没有问题应该问），然后使用 make olddefconfig ：

make help
Use to see other conversion methods available.

编译
这一步请参考 manual configuration.

重新安装外部内核模块
任何外部的内核模块，像 binary kernel modules, 需要为新的内核重新编译. 如果新内核还没有编译，需要首先为编译外部内核模块做准备：

你可以使用"@module-rebuild"命令重新编译包：

解决编译的问题
当重新编译当前内核的时候遇到问题，这也许有助于净化内核源代码. 确保首先备份了文件，因为操作过程会删除它. 确保备份文件不要以 或者  为后缀，因为  make distclean 同样会删除这些文件.

删除旧内核
参考 kernel removal.

外部资源

 * kernel changelog with some explanations of new features