10.6.如果发生了一些错误

在建立一个定制的内核时,有四类问题可能发生:

config 失败

如果 config 失败,它将打印出配置错误的行号。

例如,对于下面的信息,要比较 GENERICNOTES,请确保第 32 行的输入是正确的:

config: /usr/src/sys/amd64/conf/GENERIC:32: syntax error

make 失败

如果 make 失败,通常是由于内核配置文件中的错误,而这个错误对于 config 来说还不够严重。查看配置,如果问题不明显,请向包含内核配置文件的 FreeBSD 一般问题邮件列表发送一封电子邮件。

内核无法启动

如果新内核无法启动或无法识别设备,不要惊慌。FreeBSD 有一个优秀的机制即从不能运行的内核中恢复。

只要在 FreeBSD 的引导加载器中选择要启动的内核即可。当系统启动菜单出现时,可以通过选择 “Kernel:” 选项来访问它,该选项最初显示 “Kernel:default/kernel”。每次选择该选项时,都会出现另一个选项,例如 “kernel.old”。当所需的内核选项出现,按回车键启动。

正常启动后,检查一下配置文件,并尝试再次建立它。可以参考 /var/log/messages来获取帮助,它记录了每次成功启动时的内核信息。另外,dmesg(8) 可以打印当前启动时的内核信息。

注意

在排除内核的故障时,确保有一份 GENERIC 的备份,或者其他已知可以工作的内核在下次编译时不会被清除。这一点很重要,因为每次安装新内核时,kernel.old 都会被最后安装的内核覆盖,而这个内核可能是可启动的,也可能是不可启动的。尽快重命名包含可以正常启动的内核的目录,并转移工作内核:

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

内核可以工作,但 ps(1) 不能工作

如果内核版本与系统实用程序所使用的版本不同,例如,在一个 -RELEASE 系统上安装了一个由 -CURRENT 源构建的内核,许多系统状态命令(如 ps(1)vmstat(8))将无法运行。要解决这个问题,需要重新编译并安装与内核相同版本的源代码树。使用与操作系统其他部分不同版本的内核绝对不是一个好主意。