Handbook:Parts/Installation/Kernel/zh-cn

固件
在开始配置内核部分之前，最好了解下，一些设备需要先在系统上安装附加的固件才能正常运行. 我们经常网络接口上会使用附加的固件，特别是无线网络接口，常用于台式电脑和笔记本电脑. 此外，来自 AMD，Nvidia 和 Intel 等供应商的现代视频芯片，要想使用完整的功能，通常也需要外部固件文件. 现代硬件的大多数固件都在 软件包中. 使用这些供应商显卡的系统上，最好 emerge 这个固件包，以便在配置和编译内核之前使用.

It is recommended to have the package installed before the initial system reboot in order to have the firmware available in the event that it is necessary:

It is important to note that kernel symbols that are built as modules (M) will load their associated firmware files from the filesystem when they are loaded by the kernel. It is not necessary to include the device's firmware files into the kernel's binary image for symbols loaded as modules.

微码
除了独立显卡硬件和网络接口之外，CPU 可能也需要固件更新. 通常这种固件被称为微码（microcode）. 有时需要更新版本的微码来修补 CPU 硬件中的不稳定性、安全问题或其他复杂的错误.

AMD CPU 的微码更新通常与前面提到的 linux-firmware 软件包一起分发. Intel CPU 的微码可以在 包中找到，需要单独安装. 更多如何更新微码的细节，请查看微码文章.

内核配置和编译
现在是时候来配置和编译内核源代码了. 有三种方法：

Ranked from least involved with least control over updates, to most involved with most control over updates:


 * 1) 手动配置并生成内核.
 * 2) 一个叫作的工具用来自动化生成并安装Linux内核.
 * 3) Distribution Kernel 项目用于像其它软件包一样自动构建并且安装 Linux 内核.

Linux内核是所有发行版的核心. 它位于用户程序和系统硬件之间. Gentoo提供给用户一些可选的内核源码. 完整的带描述的列表在内核概述页面.

安装源码
When installing and compiling the kernel for -based systems, Gentoo recommends the package.

Choose an appropriate kernel source and install it using :

这将在 中安装路径中特定版本的 Linux 内核源码. 如果没有在所选内核源码包内启用 ，它将不会自行创建符号链接.

我们习惯性的维护 符号链接. 这样，它指向与当前运行的内核相对应的源代码. 然而，默认情况下不会创建这个符号链接. 有一个简单创建符号链接的方法是利用 eselect 的内核模块.

更多有关符号链接的信息以及如何管理符号链接，请参考升级内核.

首先，列出所有已安装的内核：

要创建一个名为 的符号链接，使用：

备选：使用genkernel
如果手动配置看起来太恐怖，可以考虑使用. 它将自动配置并编译内核.

Genkernel provides a generic kernel configuration file, automatically generates the kernel, initramfs, and associated modules, and then installs the resulting binaries to the appropriate locations. This results in minimal and generic hardware support for the system's first boot, and allows for additional update control and customization of the kernel's configuration in the future.

Be informed: while using to maintain the kernel provides system administrators with more update control over the system's kernel, initramfs, and other options, it will require a time and effort commitment to perform future kernel updates as new sources are released. Those looking for a hands-off approach to kernel maintenance should use a distribution kernel.

For additional clarity, it is a misconception to believe genkernel automatically generates a custom kernel configuration for the hardware on which it is run; it uses a per-determined kernel configuration that supports most generic hardware and automatically handles the commands necessary to assemble and install the kernel, the associate modules, and the initramfs file.

Binary redistributable software license group
If the linux-firmware package has been previously installed, then skip onward to the to the installation section.

As a prerequisite, due to the  USE flag being enabled by default for the  package, the package manager will also attempt to pull in the  package. The binary redistributable software licenses are required to be accepted before the linux-firmware will install.

This license group can be accepted system-wide for any package by adding the  as an ACCEPT_LICENSE value in the  file. It can be exclusively accepted for the linux-firmware package by adding a specific inclusion via a file.

If necessary, review the methods of accepting software licenses available in the Installing the base system chapter of the handbook, then make some changes for acceptable software licenses.

If in analysis paralysis, the following will do the trick:

Installation
现在，我们来看看如何使用genkernel. 首先emerge 这个ebuild：

Generation
现在，运行来编译内核源码. 值得注意的是，使用编译一个内核将支持几乎全部的硬件，这将使编译过程需要一阵子来完成！

一旦genkernel完成，将创建一个内核、全部的模块和初始化内存文件（initramfs）. 我们将在文档后面配置引导器的时候使用这个内核和initrd. 记下内核和initrd名字作为编辑引导器配置文件的信息. initrd将在后执行硬件检测之后、“真实”系统启动之前立即启动.

介绍
手动配置内核经常被 Linux 用户认为是最困难的步骤. 但是事实并非如此──当您手动配置几次内核之后，你就不会再觉得它有多么难了！

无论如何，有一件事是真实的：当手动配置内核时，了解（硬件）系统是至关重要的. 大多数信息可以通过安装包含命令的来收集：

另一个系统信息来源是运行来查看安装CD使用什么内核模块，它可能对启用什么提供了一个好的暗示.

现在进入内核源码目录并执行. 这将启动一个菜单驱动的配置屏幕.

Linux内核配置有很多很多的章节. 我们先列出一些必须激活的选项（否则Gentoo将无法工作，或者离开附加的调整将无法正常工作）. 我们同时在Gentoo维基上有一个Gentoo内核配置指南可能会在将来有帮助.

激活必要的选项
当使用 时，强烈推荐启用 Gentoo 特有的配置选项. 这些确保了系统可以正常运行所需的最少内核特性：

当然，最后两行的选择取决于所选择的 init 系统 (OpenRC 对比 systemd). 但是两种 init 系统都启用也并没有害处.

当使用 时，不能使用额外的 init 系统. 可以使用已启用的 init 系统，但这超出了手册的范围.

Enabling support for typical system components
确保引导系统的每一个至关重要的驱动（比如SCSI控制器,等等）是编译进内核而不是作为一个模块，否则系统将无法完全引导.

接下来选择最正确的CPU类型. 同时建议启用MCE功能（如果可用）能在硬件出现问题时通知用户. 在一些架构（比如x86_64），这些错误不会打印到 ，但是会到. 这需要包.

同时选择Maintain a devtmpfs file system to mount at /dev来让重要的设备文件在引导过程的早期就已就绪( CONFIG_DEVTMPFS and CONFIG_DEVTMPFS_MOUNT ):

验证 SCSI 磁盘支持是否已激活( CONFIG_BLK_DEV_SD ):

Verify basic NVMe support has been enabled:

It does not hurt to enable the following additional NVMe support:

现在进入File Systems并选择系统将使用的文件系统. 不要作为模块来编译根文件系统所使用的文件系统，否则系统可能不挂载这个分区. 同时选择Virtual memory和/proc file system根据系统的需要选择一个或多个以下选项( CONFIG_EXT2_FS, CONFIG_EXT3_FS , CONFIG_EXT4_FS , CONFIG_MSDOS_FS , CONFIG_VFAT_FS , CONFIG_PROC_FS , and CONFIG_TMPFS ):

如果使用PPPoE连接到互联网，或者是拨号调制解调器，则启用下面的选项( CONFIG_PPP, CONFIG_PPP_ASYNC , and CONFIG_PPP_SYNC_TTY )：

这两个压缩选项将是无害的，但是它们一定是不需要的，包括基于以太网的PPP选项也是一样，只有在配置内核模式PPPoE时才会需要.

不要忘记在内核中包括网（以太网或无线）卡.

大多数系统会有多核心处理，所以激活 Symmetric multi-processing support（对称多处理） 很重要 ( CONFIG_SMP )：

如果使用USB输入设备（比如键盘和鼠标）或其他USB设备，不要忘记启用那些( CONFIG_HID_GENERIC and CONFIG_USB_HID, CONFIG_USB_SUPPORT , CONFIG_USB_XHCI_HCD , CONFIG_USB_EHCI_HCD , CONFIG_USB_OHCI_HCD ):：

可选：生成一个initramfs
在某些情况中需要建立一个 initramfs──基于内存的初始化文件系统（initial ram-based file system）. 最常见的原因是当重要的文件系统位置（如 或  ）在分离的分区时. 通过initramfs，可以使用 initramfs 里面的工具来挂载这些分区.

如果没有 initramfs，会存在着系统将无法正常启动的风险，因为这是负责安装的文件系统工具需要驻留在未挂载文件系统的信息. initramfs 中的一个将在必要的文件拉进它的内核启动之后使用的档案，但控制被移交前转移到初始化工具. 在 initramfs 的脚本，然后将确保分区正确地安装在系统继续启动之前.

要安装 initramfs，首先安装，然后用它生成 initramfs：

initramfs将存储在. 结果文件可以简单的通过列出以initramfs开头的文件来找到：

现在继续到内核模块.

配置模块
在 中各个模块的每一行列出需要自动加载的模块. 如果有必要的话，可以在 文件中，为模块设置添加附加选项.

要查看所有可用模块，运行下面的命令. 不要忘记替换“ ”为刚刚编译的内核版本：

Force loading particular kernel modules
比如，要自动加载模块（3Com网卡家族的特定驱动），编辑文件并在里面输入模块名字. 实际的文件名对 loader 来说无关紧要.

Note that the module's file suffix is insignificant to the loading mechanism and left out of the configuration file:

继续到配置系统来安装.