9.6. 如果出现问题怎么办

在定制一个内核时,可能会出现五种问题。它们是:

config失败:

当你在内核描述中看到config(8)命令失败, 可能在某个地方发生了一个小错误。幸运的是, config(8)会显示出错的那一行的行号,你可以用vi编辑器做修改。 例如,如果你看到:

config: line 17: syntax error

可以在vi中用命令模式输入17G来跳到17行。 比较GENERIC内核或其他参考资料,以确定你打对了关键字。

make失败:

如果make失败,通常会在你的内核描述中提示一个错误, 但config(8)并没有找出错误。 另外,查看一下你的配置信息,如果你仍然无法解决这个问题, 可以把你的内核配置信息发邮件到FreeBSD general questions 邮件列表,它将很快地被解决。

安装新内核失败:

如果内核编译没问题,但是安装失败(make install或者 make installkernel命令失败), 第一件是检查你的系统是否运行在安全级别1或者更高(参看init(8))。 内核安装试图从你的内核移除不可改变标志,并设置新的不可改变标志,如果安全级别是1 或者更高,这会阻止设置系统文件的不可改变标志。因此内核安装需要安全级别为0或者更低。

内核无法启动:

如果你的新内核无法启动,或无法识别你的硬件,不要担心, 幸运的是,BSD有一个解决复杂内核错误的很好机制。 你可以在系统启动进行10计数的时候按Enter以外的任何键, 接着键入unload命令,再键入boot kernel.old, 或者任何能正常启动的内核名字。当配置一个内核时,在手头保留一个能正常启动的内核是个好主意。

在用一个好的内核启动后,你可以检查一下配置文件,再设法重新建立一个内核。 一个有帮助的文件是/var/log/messages文件, 它记载了每个成功启动的所有内核信息。当然,dmesg(8)也会列出当前启动中的内核信息。

Note: 你在编译内核时,确信保留着一个GENERIC或以其他名字命名的内核。 你不能仅依靠kernel.old,因为当你安装一个新内核时, kernel.old会被上一次安装的内核所覆盖。 所以,尽快将当前正常工作的kernel移到不能正常工作的内核, 可以用ps(1)命令查一下。``解开''编译安装内核文件的正确命令是:

# chflags noschg /kernel

如果你发现你不能这样做,你的系统的安全级别可能大于0了。在/etc/rc.conf里面编辑 kern_securelevel并把它设置为-1然后重启。 当你很满意这个内核的时候,你可以再把设置改回去。

另外,如果你要``锁住''内核或其他文件,以至它不能被移动或修改 ,可以用下面的命令:

# chflags schg /kernel

在FreeBSD 5.X里面, 内核安装后不再有不可改变标志,所以上面这些问题你将不会遇到。

内核工作,但是ps(1)根本不工作:

如果你在系统中安装了一个不同版本的内核,例如,在3.x系统中安装了4.x内核, 许多系统内建的命令像ps(1)vmstat(8)根本不工作。你必须重新编译libkvm库以及这些程序。 千万不要随意从其他系统拷贝不同版本的内核来使用。