9.6 出现问题怎么办?
在定制一个内核时,可能会出现五类问题。它们是:
配置错误:
当你给config 命令传递你的内核描述时出错,你可能在某个地方发生了一个小错误。幸运的是,config会显示出错的那一行的行号,你能很快找到出错地点并用vi编辑器做修改。例如,如果你 看到:
config: line 17: syntax error
你可以在vi 的命令模式输入17G 来跳到17 行(也就是出错的那行)。和比较GENERIC内核或其它参考资料, 以确定你没有打字错误。
编译错误:
如果编译命令失败,通常会在你的内核描述中提示一个错误,但config并没有能力找出错误。另外,查看一下你的配置信息,如果你仍然无法解决这个问题,可以把你的内核配置文件发到FreeBSD 常规问题邮件列表,它将很快地被解决。
安装新内核失败:
如果内核编译成功,但安装失败(make install 或是 make installkernel 命令失败),******件要检查的事情就是你的系统运行的安全级别是否是 1或更高。内核的安装需要移除内核的不可变信号 量,并用新内核的不可变信号量代替。而securelevel 1或更高时,是不允许任何对系统不可变信号量的改变 ,内核的安装需要在securelevel 0或更低时才能完成。
内核无法启动:
如果你的新内核无法启动,或无法识别你的硬件,不要担心!幸运的是,FreeBSD 有一个很棒的从错误内核恢复的机制。简单的说就是,从FreeBSD 的启动loader 中,选择一个你要使用的内核。在 系统时间从10开始倒计时时,按下除Enter 之外的任何键, 输入unload然后输入 boot kernel.old, 或者其 它任何能准确引导的内核的文件名字.当配置一个内核时,记得在手头保留一个能正常启动的内核是个好主意 。
在用一个好的内核启动后,你可以检查一下你的配置文件,再设法重新建立一个内核。看看/var/log/messages 文件会比较有帮助,它记录了每次成功启动的所有内核信息。同样,dmesg 命令会列出当前启动中的内核信息。
注意: 你在编译内核时,确信手头保留着一个GENERIC 或其它名字的不会被下次构建所覆盖的内核。你不 能仅依靠kernel.old, 因为当你安装一个新内核时,kernel.old 会被***后一次安装的内核(也许就是无法正 常工作的)所覆盖。所以,尽快将当前正常工作的内核移到适当的内核位置,否则ps等命令不会正常工作。 解开编译安装内核文件的正确命令是:
# chflags noschg /kernel
如果该命令无效,可能是你的系统的安全级别大于0。可在 /etc/rc.conf中把kern_securelevel设置成 -1, 然后从启系统. 在新内核成功后,你可以把它再改回去。另外,如果你要设定内核或其它文件的访问限制,以使它不能被移动或修改,可以用下面的命令:
# chflags schg /kernel
在5。x中,内核不和系统不可变信号量安装在一起。所以这对追查所遇问题来源使无济于事的。
内核工作,但ps 根本就不工作:
如果你安装了一个不同版本的内核到系统,例如,在3.x 系统中安装了4.x 内核,许多系统内建的命令象ps 和vmstat 会根本不工作。你必须重编译libkvm 库以及这些程序。千万不要随意从其它系统拷贝不同版本的内核来使用。