> 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.6.-ru-guo-fa-sheng-le-yi-xie-cuo-wu.md).

# 10.6.如果发生了错误

在构建定制内核时，可能会遇到四种类型的故障：

**`config` 失败**

如果 `config` 失败，它会打印出错误的行号。例如，对于以下消息，请确保第 17 行输入正确，可与 **GENERIC** 或 **NOTES** 文件比较：

```sh
config: line 17: syntax error
```

**`make` 失败**

如果 `make` 失败，通常是由于内核配置文件中的错误，但该错误未严重到 `config` 能检测到的程度。请检查配置文件，如果问题不明显，可以将内核配置文件发送到 [FreeBSD 常见问题邮件列表](https://lists.freebsd.org/subscription/freebsd-questions) 求助。

**内核无法引导**

如果新内核无法引导或无法识别设备，不必惊慌！幸运的是，FreeBSD 提供了优秀的机制来从不兼容的内核中恢复。只需在 FreeBSD 引导加载器中选择要引导的内核。在系统引导菜单出现时，选择“Escape to a loader prompt”选项。在提示符下，输入 `boot kernel.old`，或者输入任何已知能正常引导的内核名称。

在使用可用的内核引导后，请检查配置文件并尝试重新构建。有用的资源是 **/var/log/messages**，它记录了每次成功引导的内核信息。另外，[dmesg(8)](https://man.freebsd.org/cgi/man.cgi?query=dmesg\&sektion=8\&format=html) 会打印当前引导的内核信息。

> **注意**
>
> 在排查内核问题时，确保保留一份已知可正常工作的内核副本（如 **GENERIC**）。这一点很重要，因为每次安装新内核时，**kernel.old** 都会被上一次安装的内核覆盖，而那个内核未必能正常引导。应尽快通过重命名目录来转移可正常工作的内核：

```sh
# mv /boot/kernel /boot/kernel.bad
# mv /boot/kernel.good /boot/kernel
```

**内核正常工作，但** [**ps(1)**](https://man.freebsd.org/cgi/man.cgi?query=ps\&sektion=1\&format=html) **无法使用**

如果内核版本与系统工具的构建版本不同，例如，在 -RELEASE 系统上安装了从 -CURRENT 源代码构建的内核，那么许多系统状态命令，如 [ps(1)](https://man.freebsd.org/cgi/man.cgi?query=ps\&sektion=1\&format=html) 和 [vmstat(8)](https://man.freebsd.org/cgi/man.cgi?query=vmstat\&sektion=8\&format=html)，将无法工作。为了解决这个问题，请 [重新编译并安装使用与内核相同版本源代码树构建的世界](/di-27-zhang-freebsd-geng-xin-yu-sheng-ji/27.6.-cong-yuan-dai-ma-geng-xin-freebsd.md)。使用与操作系统其他部分版本不同的内核版本从来不是好主意。
