FreeBSD连载(59):编译安装新内核
来源: 作者: 出处:综艺读书 2006-10-10编译安装新内核
在/usr/src/sys/i386/conf目录下,可以看到一系列内核配置文 件的样例。
|
|
|||
bash-2.02$ ls /sys/i386/conf GENERIC Makefile.i386 files.i386 majors.i386 LINT PICOBSD-N.2000 ipfilter options.i386 LKM devices.i386 kernel.script
目录中最重要的文件有GENERIC和LINT,名为GENERIC的文件就是 通用内核kernel.GENERIC的配置文件,而LINT文件中包括FreeBSD支持的 几乎所有配置参数,并逐一加以解释。另一些文件则是其他硬件配置下, 用于特定目的的配置文件的例子。因此GENERIC和LINT文件是在设置内核 时的必备参考。有了这些文件作参考之后,就可以生成针对某个计算机具 体设置的配置文件就更为简单了,并执行编译内核的任务。
- 修改内核的一般原则
要定制内核,就必须要生成配置文件。一般都是通过更改已有配 置文件的方法来生成特定的配置文件,以简化设置工作。但直接修改已有 的配置文件的方式,如修改GENERIC文件,并不可取,而应该先复制生成 一个新的配置文件,这样就可以使用多个配置文件,维护多个不同配置的 内核。这些内核可以是为一台计算机准备的,也可以是为多台计算机准备 的。新配置文件可以很方便的从对已有配置文件,如GENERIC,进行复制 得到。例如:
# cd /usr/src/sys/i386/conf # cp GENERIC mykernel
然后再修改mykernel这个配置文件,第一步需要完成的任务是先删 除不必要的硬件支持选项,这是因为通用内核支持的硬件设备通常要多于 计算机系统中实际存在的硬件设备,不必要的硬件驱动代码会占用不必要 的内核内存空间。除了根据管理员对计算机硬件配置的了解来进行删除不 必要的硬件驱动选项之外,比较简便的方法是根据FreeBSD的通用内核在启 动时报告的信息来判断哪个设备已经探测到,哪个设备没被探测到。使用 系统命令dmesg可以查看系统启动时的信息,因此没被探测到的设备可以使 用命令来得到:
# dmesg | grep “not found”
这个命令输出的结果,或者是计算机中并不存在的设备,或者是驱 动程序的参数没有配置正确,没有正确检测到硬件设备的情况。如果确认 没有这个硬件设备,就可以在配置文件中将其删除。
有些硬件设置的缺省参数与系统中的硬件设置并不一致,可以通过 更改配置文件中的配置参数来改变设置,以达到正确检测硬件的目的。
有些设备在GENERIC配置文件中并没有提供支持,例如声卡设备,以 及多处理器支持能力。如果要想支持这些设置,就要将相应的设置参数增添 到配置文件中,可以要参考文件LINT中的相应设置来完成增添硬件的过程。
为了得到一个合适的内核,或许需要不止一次的更改设置。当对计 算机的某些硬件设置不是很清楚,为了节约编译内核次数,可以先通过 UserConfig更改确定正确的硬件设置,再重新编译内核的这种循序渐进方 式,逐步获得硬件的正确配置。
重新定制内核不但是为了获得硬件配置的正确性,还可以通过更改内 核设置支持一些FreeBSD支持的特定功能、优化现有能力,以发挥系统的最大 能力,从而达到将硬件具备的最大能力,充分发挥FreeBSD具备的强大处理能 力。
- 编译和安装内核
在生成自己的内核配置文件mykernel之后,就可以进入下一步编译安 装过程了。在配置文件所在的目录中,输入:
# /usr/sbin/config mykernel Removing old directory ../../compile/mykernel: Done. Kernel build directory is ../../compile/mykernel
这个命令将产生一个/usr/src/sys/complie/mykernel的目录,其中目 录名对应于内核的名字,这样就使得系统中可以同时维护多个不同的内核,不 同的内核相互独立而互不干扰。这个目录中就包括了编译内核所需的源文件。
如果这个过程出现错误,就说明配置文件中存在语法错误,config程序 将会提示出错的行,以便使用者进行修改。但是config不会发现配置文件中存 在的逻辑错误,这些逻辑错误只能在编译内核时才能发现。
下一步就是进入生成的目录中进行编译和安装。
# cd ../../compile/mykernel # make depend # make
编译过程需要一些时间以进行编译,这时候就可以作些其他任务等待 编译结束。但如果配置文件存在逻辑错误,在编译时会形成错误。因为内核配 置选项不是相互无关的,而是存在相关依赖关系,有些设置项会依赖于另外的 设置项。当发生这些逻辑错误的时候,当所有需要的源文件都存在时,就说明 配置文件中缺少一些基本参数定义的代码,需要重新加入。例如所有的EISA设 备依赖于controller eisa0定义的EISA控制器,那么删除controller eisa0设 置项就会造成编译EISA设备时,缺少controller eisa0对应的源程序中定义的 函数和变量,就会造成编译失败。确定没有EISA设备的时候,就要删除所有的 EISA相关选项,以避免逻辑错误。
内核编译成功之后,就可以进行安装了:
# make install
这将原有内核更改为/kernel.old,然后将编译后产生的新内核移到根 目录下,命名为/kernel。此后可以重起系统,检查新内核是否正确。
# reboot
如果新内核的配置不正确,造成某些硬件不能正确检测造成不能正常启 动。此时就需要重新用老内核进入系统,以重新进行编译纠正错误。选择不同 内核必须通过Boot Loader的交互界面进行,需要在启动时进入Boot Loader,然 后可以输入load kernel.old命令,使用老内核启动系统,或者使用kernel.GENERIC 通用内核启动系统。
为了避免第二次编译内核时,将错误的内核保存为kernel.old,覆盖原 有的正确设置,也可以先将正确的内核拷贝为根文件系统中的另一个文件,进行 备份保存,只有放置在根分区上的内核才能正常启动系统,因此备份到其他文件 系统中内核意义不大。
未完,待续。。。
·系统安装手册 (16426篇文章)
·FreeBSD系统安全管理 (7310篇文章)
·数据库安装与卸载 (8978篇文章)
·全面解析 Linux2.6内核 (525篇文章)
·FreeBSD使用教程 (5218篇文章)
·Freebsd频道 (618篇文章)
·Freebsd系统安装 (126篇文章)
·FreeBSD系统安装 (178篇文章)
·FreeBSD系统的使用 (83篇文章)
·在FreeBSD4.x中制作启动菜单 12-12
·在FREEBSD 5中使用MRTG画图 12-07
·浅谈FreeBSD 5.2常用操作的改变 12-02
·FreeBSD如何通过代理上网更新 11-21
·拿刀砍才能进freebsd系统的修复方法 10-27
·FreeBSD新手建议 10-14
·CERT? Advisory CA-2003-25 Buffer Overflow in Se 10-12
·FREEBSD下使用crunch集成编译程序 10-10
·FreeBSD下配置IPSec:WinXP------FreeBSD 10-10




