[FreeBSD深入学习系列]FreeBSD内核配置Howto

[FreeBSD深入学习系列]FreeBSD内核配置Howto
Configure The Kernel Howto
郑重申明:本文版权属于www.linuxsir.org
作者:Freebird
任何转载均需注明作者及出处
发表时间:2003年12月31日


1.假如你的系统上没有 /usr/src/sys目录,就意味着你没有安装内核原代码。 安装内
核源码的最简便的方法是以root身份运行/stand/sysinstall ,选择Configure, ,然后
Distributions ---> src--> sys.假如你不喜欢从sysinstall安装,你也可以从
FreeBSD的安装盘中安装之:

# mount /cdrom
# mkdir -p /usr/src/sys
# ln -s /usr/src/sys /sys
# cat /cdrom/src/ssys.[a-d]* | tar -xzvf -

然后
# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL


提示::把你的内核配置文件放在 /usr/src 目录下是一个很不好的做法。假如你遇到
问题,它会试着仅仅删除/usr/src并从新开始. 你很快就会意识到你的默认内核已经被
删除。不要直接编辑GENERIC ,因为更新源码树(Source tree)后,该文件会被覆盖,你对
内核所做的修改也将会丢失.你可以把你的内核配置文件放到其他地方,然后做个链接
到i386,比如:
# cd /usr/src/sys/i386/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL
# ln -s /root/kernels/MYKERNEL

注: 下面的命令都需要以root身份运行,否则会出现权限的错误.
2.现在,用你喜欢的编辑器编辑MYKERNEL .


现在你就可以编译内核了.有两种方法。选择哪一种方法取决于你为什么要重建内核和
你的FreeBSD的版本。

1)假如你只安装了内核源码,用方法1。也就是说,新方法要求你安装全部的系统源码
(System-source-----The source for userland),该源码你可以从安装盘里得到或者
从网上cvs.
2)如果你的FreeBSD用是是4.0以前的版本,并且没有升级到4.0或者更高的版本,用方
法1。
3)如果你想在不升级源码的情况下(也许仅仅是增加一些options,比如
IPFIREWALL) )重建内核,两种方法你都可以用!
4)假如你把重建内核作为make world 的一部分,用方法2..

.


方法1. 传统的方法(traditional way)重建内核:

运行config(8) 生成内核源代码.

# /usr/sbin/config MYKERNEL

进入build 目录
# cd ../compile/MYKERNEL

5.0以前的版本,如下

# cd ../../compile/MYKERNEL

编译内核:

# make depend
# make

安装新内核:

# make install

简化为:
----------------------------------------------------------------------------
------------
# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL
# ee MYKERNEL
# /sbin/config MYKERNEL
# cd ../../compile/MYKERNEL (on 5.x it's ../compile/MYKERNEL)
# make depend
# make
# make install
# reboot
----------------------------------------------------------------------------
------------

方法2. ``New'' Way重建内核:

进入目录/usr/src :
# cd /usr/src

编译内核:
# make buildkernel KERNCONF=MYKERNEL

安装新内核
# make installkernel KERNCONF=MYKERNEL

简化为:
----------------------------------------------------------------------------
------------
# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL
# ee MYKERNEL
# cd /usr/src
# make buildworld
# make KERNCONF=MYKERNEL buildkernel
# make KERNCONF=MYKERNEL installkernel
# reboot
----------------------------------------------------------------------------
------------


两种方法的不同点

老的方法要用到/usr目录下的编译工具和库文件。这种方法是编译一个新的内核给一个
已经存在的系统(existing system. )。你要用的仅仅是位于/usr/src/sys下的内核源
代码。假如你已经将你的源码升级到FreeBSD的其他版本,那么你就不能 在你的机子上
用这种方法了。

新方法首先 builds world,包括一 套新的编译工具和库文件,并且将他们保存
usr/obj/usr/src/* .下。新方法用这些工具来编译内核;这就是为什么你可以运行一
个4.6的系统,cvsup源代码到4.7.用4.7中的工具编译一个给4.7的内核。

在任何时候你都可以用新的方法,它保证可以建立一个可用的内核(当然排除源码损坏
的情况)。但是,那个内核可否运行在你的计算机上,取决于你安装的版本和你用来编
译内核的源代码的版本。

假如你有疑问,先用老方法。如果出问题了,就意味着源代码和你的系统不同步,导致
内核和你的系统不同步了。在线cvsup回你的源代码,然后循环运行build/installworld

这个循环的新方法是:
--------------------------------------------------------------------
(reboot to single-user mode)
# cd /usr/src
# make installworld
# mergemaster
# reboot
-------------------------------------------------------------------
注意:
在FreeBSD 4.2 和其以前的版本中,你需要用KERNEL=. 4.2-STABLE 而不是KERNCONF=
with ,Feb 2nd, 2001 前的不能识别 KERNCONF=.

如果你没有通过任何方法更新你的源码树(你没有运行CVSup, CTM或者used anoncvs),
你就应该 config, make depend, make, make install 这种方法了.

新内核将会复制到/kernel ,老内核将移至/kernel.old. 重起之后就可以使用新内核
了。
注意: 在FreeBSD5.0中,内核和它们与它们相关的模块(modules i)都安装在
/boot/kernel, 目录下,老的内核备份在/boot/kernel.old 下。和boot进程相关的一些
文件,比如 boot loader(8) 和其他的配置文件也都放在/boot.下 。第三方模块或者
自定义模块放在/boot/modules 下, 尽管用户觉得保持modules和已编译的内核同步是
非常重要的。Modules 不能和编译过的内核相处融洽,将会导致系统不稳定或者错误的
产生.

注意: 如果你添加了新的设备,而你运行的是FreeBSD4.x 或者更老的版本。在你使用
那些设备前,你必须添加相应的设备节点(device nodes)到/dev 目录下.
程序。千万不要随意从其它系统拷贝不同版本的内核来使用。

posted on 2004-08-26 12:58  笨笨  阅读(1330)  评论(0编辑  收藏  举报

导航