> For the complete documentation index, see [llms.txt](https://handbook.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://handbook.bsdcn.org/di-10-zhang-pei-zhi-freebsd-nei-he/10.4.-pei-zhi-wen-jian.md).

# 10.4.配置文件

为了创建定制内核配置文件并构建定制内核，必须首先安装完整的 FreeBSD 源代码树。

如果 **/usr/src/** 目录不存在或为空，则说明源代码未安装。可以按照 ["使用 Git"](/fu-lu-a.-huo-qu-freebsd/a.2.-shi-yong-git.md) 中的说明通过 Git 安装源代码。

安装完源代码后，请查看 **/usr/src/sys** 目录的内容。该目录包含多个子目录，其中包括表示以下受支持架构的目录：**amd64**、**i386**、**powerpc** 和 **sparc64**。每个特定架构的目录只处理该架构的相关内容，其他代码则是所有平台通用的机器无关代码。每个受支持架构都有一个 **conf** 子目录，其中包含该架构的 **GENERIC** 内核配置文件。

不要直接编辑 **GENERIC** 文件。相反，应将文件复制并编辑复制的文件。命名惯例是使用全大写字母的名称。在管理多台具有不同硬件的 FreeBSD 机器时，建议将其命名为机器的主机名。以下示例为 `amd64` 架构的 **GENERIC** 配置文件创建名为 **MYKERNEL** 的副本：

```sh
# cd /usr/src/sys/amd64/conf
# cp GENERIC MYKERNEL
```

现在可以使用任何 `ASCII` 文本编辑器自定义 **MYKERNEL**。默认编辑器是 vi，但 FreeBSD 还安装了更适合初学者的编辑器 ee。

内核配置文件的格式很简单。每行包含代表设备或子系统的关键字、参数和简短说明。任何在 `#` 后面的文本都视为注释并忽略。要从内核配置中删除对某个设备或子系统的支持，请在表示该设备或子系统的行的开头加上 `#`。对于你不理解的行，请不要添加或删除 `#`。

> **警告**
>
> 删除设备或选项的支持很容易导致内核损坏。例如，如果从内核配置文件中删除 [ata(4)](https://man.freebsd.org/cgi/man.cgi?query=ata\&sektion=4\&format=html) 驱动程序，使用 `ATA` 磁盘驱动程序的系统可能无法引导。如有疑问，最好将支持保留在内核中。

除了文件中提供的简短说明外，**NOTES** 文件中还包含附加说明，可以在该架构的 **GENERIC** 文件所在目录中找到。对于架构无关的选项，请参考 **/usr/src/sys/conf/NOTES**。

> **技巧**
>
> 完成定制内核配置文件后，将备份副本保存到 **/usr/src** 之外的位置。
>
> 还可以将内核配置文件保存在其他地方，并创建指向该文件的符号链接：
>
> ```sh
> # cd /usr/src/sys/amd64/conf
> # mkdir /root/kernels
> # cp GENERIC /root/kernels/MYKERNEL
> # ln -s /root/kernels/MYKERNEL
> ```

配置文件中可以使用 `include` 指令。这能将另一个配置文件包含到当前配置文件中，便于针对现有文件维护少量修改。如果只需要少量的额外选项或驱动程序，可通过这种方法维护与 **GENERIC** 的差异，如下所示：

```sh
include GENERIC
ident MYKERNEL

options         IPFIREWALL
options         DUMMYNET
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPDIVERT
```

使用这种方法，本地配置文件表示与 **GENERIC** 内核的本地差异。在执行升级时，除非使用 `nooptions` 或 `nodevice` 明确防止，否则 **GENERIC** 中新增的特性也会添加到本地内核中。有关配置指令及其说明的完整列表，请参阅 [config(5)](https://man.freebsd.org/cgi/man.cgi?query=config\&sektion=5\&format=html)。

> **注意**
>
> 要构建包含所有可用选项的文件，请以 `root` 用户身份运行以下命令：
>
> ```sh
> # cd /usr/src/sys/arch/conf && make LINT
> ```
