10.4.配置文件 ============= 为了创建定制内核配置文件和编译定制内核,必须首先安装完整的 FreeBSD 源代码。 如果 **/usr/src/** 目录不存在或为空,说明没有安装源代码。可以使用 Git 来安装源代码。使用说明:\ `“使用 Git” `__\ 。 源代码安装完毕后,检查 **/usr/src/sys** 的内容。这个目录包含许多子目录,包括那些表示 FreeBSD 支持的体系结构的子目录。在一个特定架构的目录中的所有内容只涉及该架构,其余的代码是所有平台通用的独立机器代码。每个支持的架构都有一个 **conf** 子目录,包含该架构的 **GENERIC** 内核配置文件。 请勿直接编辑 **GENERIC**\ 。而应将文件复制并重命名为另一个文件名,并对该副本进行编辑。文件名通常使用全大写字母。当维护多台不同硬件的 FreeBSD 机器时,建议用机器的主机名来命名。在这个例子里,为 ``amd64`` 架构的 **GENERIC** 配置文件创建了一个名为 **MYKERNEL** 的副本: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # cd /usr/src/sys/amd64/conf # cp GENERIC MYKERNEL 现在可以用任何 ``ASCII`` 文本编辑器来编辑 **MYKERNEL**\ 。默认的编辑器是 vi,不过 FreeBSD 还安装了一个更容易使用的编辑器,名为 ee。 内核配置文件的格式很简单。每一行都包含一个代表设备或子系统的关键字,一个参数,和一个简短的介绍。\ ``#`` 后面的任何文字都被认为是注释并被忽略。要删除内核对某个设备或子系统的支持,在代表该设备或子系统的行的开头加上 ``#``\ 。不要为任何你不理解的行添加或删除 ``#``\ 。关于配置内核文件的更多信息可以在 `config(5) `__ 中找到。 **警告** 移除对某个设备或选项的支持很容易导致内核损坏。例如,如果从内核配置文件中删除驱动 `ata(4) `__ ,使用 ATA 磁盘驱动的系统可能无法启动。如果不确定,就在内核中留下对设备的支持。 除了在这个文件中提供的简要介绍之外,在 **NOTES** 中还有更多的说明,这些说明可以在该架构的 **GENERIC** 的同一目录中找到。对于独立于架构的选项,请参考 **/usr/src/sys/conf/NOTES**\ 。 **技巧** 当完成对内核配置文件的定制后,保存一份备份到 **/usr/src** 以外的位置。另外,在其他地方保留内核配置文件,并创建一个符号链接到该文件: .. code:: shell-session # cd /usr/src/sys/amd64/conf # mkdir /root/kernels # cp GENERIC /root/kernels/MYKERNEL # ln -s /root/kernels/MYKERNEL MYKERNEL 可以在配置文件中使用 ``include`` 指令。这允许将另一个配置文件包含在当前的文件中,从而使维护相对于现有文件的小改动变得容易。如果只需要少量的额外选项或驱动,就可以相对于 **GENERIC** 来说保持一个很小的变化,就像在这个例子中看到的那样: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session include GENERIC ident MYKERNEL options IPFIREWALL options DUMMYNET options IPFIREWALL_DEFAULT_TO_ACCEPT options IPDIVERT 使用这种方法,本地配置文件表达了与 **GENERIC** 内核的局部差异。随着升级的进行,添加到 **GENERIC** 中的新特性也将被添加到本地内核中,除非使用 **nooptions** 或 **nodevice** 来阻止。 在 `config(5) `__ 中可以找到一份全面的配置指令清单和它们的简介。 **注意** 要创建一个包含所有可用选项的文件,请以 ``root`` 身份运行以下命令: .. code:: shell-session # cd /usr/src/sys/arch/conf && make LINT