Chinaunix首页 | 论坛 | 博客
  • 博客访问: 87928
  • 博文数量: 21
  • 博客积分: 1416
  • 博客等级: 上尉
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2005-09-02 14:45
文章分类

全部博文(21)

文章存档

2010年(2)

2009年(7)

2007年(3)

2006年(2)

2005年(7)

我的朋友

分类: BSD

2005-11-14 18:26:31

FreeBSD使用手册第8章

FreeBSD内核配置这里讲解的很详细,如果编译内核不成功或者出现其他问题,建议好好看一下。

配置FreeBSD的内核

Updated and restructured by Jim Mock. Originally contributed by Jake Hamby.

内核是 FreeBSD 操作系统的核心。 它负责管理内存、 执行安全控制、 网络、 磁盘访问等等。尽管 FreeBSD 可以动态修改的现在已经越来越多,但有时您还是需要重新配置和编译您的内核。

读完这章,您将了解:

  • 为什么需要建立定制的内核。

  • 如何编写内核配置文件,或修改已存在的配置文件。

  • 如何使用内核配置文件创建和联编新的内核。

  • 如何安装新内核。

  • 如何在 /dev 中创建设备节点。

  • 如何出现问题怎么办。

这一章给出的命令应该以 root 身份执行,否则可能会不成功。


过去, FreeBSD 采用称作 “单片式” 的内核。 这句话的意思是说内核是一个大的程序,支持固定的设备, 如果您希望改变内核的行为则必须编译一个新的,并重新启动计算机来引导它。

今天, FreeBSD 已经迅速地转移到了一个新的模型,其重要特征是内核功能可以由能够根据需要动态加载和卸载的模块来提供。这是的内核能够迅速地适应硬件的调整 (例如笔记本电脑的 PCMICA),或为内核增加在最初编译它时所不具备的新的功能。 这一模式成为模块化内核。

尽管如此, 一些功能仍然需要静态地连编进内核。一些情况是因为这些功能于内核的结合十分紧密, 而不可能将它们做成可以动态加载的。另一种情况是因为没有人有时间来编写实现那个功能的可以动态加载的内核模块。

建造定制的内核是几乎每一个 BSD 用户所必须经历的一关。 尽管这项工作可能比较耗时,但它能够为使用 FreeBSD 系统带来很多好处。 与必须支持大量各式硬件的 GENERIC 内核不同, 定制的内核可以只包含对于 您的 PC 硬件的支持。 这有很多好处,例如:

  • 更快地启动。 因为内核只需要检测您系统上的硬件, 启动时所花费的时间将大大缩短。

  • 使用更少的内存。 定制的内核通常会比 GENERIC 内核使用更少的内存, 由于内核必须时刻处于物理内存中, 因此这就显得更加重要。给予这样的原因, 对于内存较小的系统来说, 定制内核将发挥更大的作用。

  • 支持更多的硬件。 定制的内核允许您增加类似声卡这样的 GENERIC 内核没有提供内建支持的硬件。


首先对内核构建目录做一个快速的浏览。 这里所提到的所有目录都在 /usr/src/sys 目录中; 也可以通过 /sys 来访问它。 这里的众多子目录包含了内核的不同部分, 但对我们所要完成的任务最重要的目录是 arch/conf,您将在这里编辑定制的内核配置; 以及 compile,编译过程中的文件将放置在这里。 arch 表示 i386alphaamd64ia64powerpcsparc64, 或 pc98 (在日本比较流行的另一种 PC 硬件开发分支)。在特定硬件架构目录中的文件只和特定的硬件有关; 而其余代码则是与机器无关的,则所有已经或将要移植并运行 FreeBSD 的平台上都共享这些代码。 文件目录是按照逻辑组织的,所支持的硬件设备、 文件系统, 以及可选的组件通常都在它们自己的目录中。 5.X 版之前的 FreeBSD 只支持 i386alphapc98 这三种硬件架构。

这一章提供的例子假定您使用 i386 架构的计算机。 如果您的情况不是这样,只需对目录名作相应的调整即可。

Note: 如果在您的系统上 没有 /usr/src/sys 这个目录,则说明没有安装内核源代码。 最简单的方法是以 root 身份执行 /stand/sysinstall, 选择Configure,接着是Distributions, 下来src, 最后sys。如果您已经有一张“官方”FreeBSD系统安装盘;并且您有权限使用光驱,那么您也可以通过下面命令行来安装源代码:

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

接下来, 进入 arch/conf 目录下面, 复制 GENERIC 配置文件,并给这个文件起一个容易辨认的名称, 它就是您的内核名称。例如:

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

通常,这个名称是大写的,如果您正维护着多台不同硬件的FreeBSD机器,以您机器的域名来命名是非常好的主意。我们把它命名为MYKERNEL就是这个原因。

Tip: 将您的内核配置文件直接保存在 /usr/src 可能不是一个好主意。 如果您遇到问题, 删掉 /usr/src 并重新开始很可能是一个诱人的选择。 一旦开始做这件事,您可能几秒钟之后才会意识到您同时会删除定制的内核配置文件。 另外, 也不要直接编辑 GENERIC, 因为下次您 更新代码 时它会被覆盖, 而您的修改也就随之丢失了。

您可以考虑将内核配置文件放到别的地方, 然后在 i386 目录中建立一个符号连接指向它。

例如:

# cd /usr/src/sys/i386/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL
# ln -s /root/kernels/MYKERNEL

Note: 必须以 root 身份执行这些和接下来命令,否则就会得到 permission denied 的错误提示。

现在就可以用您喜欢的文本编辑器来编辑 MYKERNEL 了。如果您刚刚开始使用 FreeBSD, 唯一可用的编辑器很可能是 vi,它的使用比较复杂, 限于篇幅, 这里不予介绍, 您可以在 参考书目 一章中找到很多相关书籍。 不过, FreeBSD 也提供了一个更好用的编辑器, 它叫做 ee, 对于新手来说,这很可能是一个不错的选择。 您可以修改配置文件中的注释以反映您的配置, 或其他与 GENERIC 不同的地方。

如果您在SunOS或者其他BSD系统下定制过内核,那这个文件中的绝大部分将对您非常熟悉。如果您使用的是诸如DOS这样的系统,那GENERIC配置文件看起来就非常困难, 所以在下面的 配置文件章节将慢慢地、仔细地进行介绍。

Note: 如果您和 FreeBSD project 进行了 代码同步,则一定要在进行任何更新之前查看 /usr/src/UPDATING。这个文件中描述了更新过的代码中出现的重大问题或需要注意的地方。 /usr/src/UPDATING 总是和您的 FreeBSD 源代码对应,因此能够提供比手册更具时效性的新内容。

现在应该编译内核的源代码了。 一共有两种方法来完成这项工作,使用哪一种取决于您为什么要重新编译内核, 以及所运行的 FreeBSD 版本。

  • 如果您安装内核源代码,使用方法1。

  • 如果您运行的是FreeBSD4.0以前的版本的话,而且您升级到 FreeBSD 4.0或更高版本,只要使用方法1。

  • 如果您在没有升级源代码的情况下编译一个新内核(也许您只想为内核添加一个新的选项,如IPFIREWALL),可以使用任何一种方法。

  • 如果您正在重建的内核是作为make world进程的一部分,需要使用方法2。

如果从上次成功地完成 buildworld-installworld 以来您还 没有 升级过代码 (也就是没有运行 CVSupCTM, 或使用 anoncvs), 则可以放心使用 configmake dependmakemake install

方法1. 用“传统”方法建立一个内核

  1. 运行config(8)来产生内核源代码。

    # /usr/sbin/config MYKERNEL
    
  2. 进入编译内核的目录。 config(8) 将在像上面一样显示执行它所在的目录的名字。

    # cd ../compile/MYKERNEL
    

    对于 FreeBSD 5.0 以及更早的版本, 使用下面的形式:

    # cd ../../compile/MYKERNEL
    
  3. 编译内核。

    # make depend
    # make
  4. 安装新内核。

    # make install
    

方法2. 用“新的”方法建立一个内核

  1. 切换到/usr/src 目录。

    # cd /usr/src
    
  2. 编译内核。

    # make buildkernel KERNCONF=MYKERNEL
    
  3. 安装新内核。

    # make installkernel KERNCONF=MYKERNEL
    

Note: 在FreeBSD 4.2老版本里面您必须用KERNEL= 来替换KERNCONF=。2001年2月2日以后生成的4.2-STABLE 就可以认出KERNCONF=

新内核将会被复制到 /boot/kernel 目录中成为 /boot/kernel/kernel 而旧的则被移到 /boot/kernel.old/kernel。 现在关闭系统, 然后用新的内核启动计算机。如果出现问题, 后面的一些 故障排除方法 将帮您摆脱困境。 如果您的内核 无法启动,请参考那一节。

Note: 在 FreeBSD 4.X 以及更早的版本中, 内核被安装到 /kernel 而模块则放到 /modules,旧的内核则被备份到 /kernel.old。 其他与启动过程相关的文件, 如 loader(8) 以及配置则放在 /boot。 第三方或定制的模块也可以放在 /modules, 不过应该注意保持模块和内核的同步时很重要的,否则会导致不稳定和错误。

Note: 如果添加了新设备 (例如声卡) 并在运行 FreeBSD 4.X 或更早的版本,则可能好需要在 /dev 目录中添加它们的设备节点之后才能使用。欲了解详情,请参考本章稍后的 制作设备节点 一节。


Updated for FreeBSD 5.X by Joel Dahl.

配置文件的格式是非常简单的。 每一行都包括一个关键词, 以及一个或多个参数。 实际上,绝大多数行都只包括一个参数。 在 # 之后的内容会被认为是注释而忽略掉。 下面的每个小节,将依次介绍每个列在 GENERIC 中的选项, 当然, 一些相关的关键词 (如网络) 将被放在一起,尽管在 GENERIC 中可能分散在各处。 如果需要与平台有关的选项和设备的详细列表, 请参考与 GENERIC 在同一个目录中的那个NOTES,而平台无关的选项, 则可以在 /usr/src/sys/conf/NOTES 找到。

Note: NOTES 在 FreeBSD 4.X 中并不存在。与此相反, 请参考 LINT 文件来获得关于 GENERIC 中的选项和设备详细介绍。 LINT 在 4.X 中完成了两项使命: 为构建定制内核提供可选的选项,以及提供尽可能多的调整为非默认值的选项。 这么做背后的原因是这种配置文件能够帮助 (并且仍然能) 测试新代码以及现有代码的修改是否会造成与内核其他部分的冲突。 然而,内核配置的架构在 5.X 中经历了巨大的变化; 其中的一个例子是设备驱动的选项被移到了 hints 中, 从而可以随时修改并在启动时动态加载, 而 LINT 不能再包含这些 hints 了。 由于这个以及许多其他原因, 决定将 LINT 改名为 NOTES,而保留它的主要是为了前面所说的第一个原因: 给出可用的选项, 为用户提供方便。

在 FreeBSD 5.X 和以后的版本中您仍然可以通过下面的命令生成 LINT 文件:

# cd /usr/src/sys/i386/conf && make LINT

下面是一个 GENERIC 内核配置文件的例子,它包括了一些需要解释的注释。 这个例子应该和您复制的 /usr/src/sys/i386/conf/GENERIC 非常接近。

#
# GENERIC -- Generic kernel configuration file for FreeBSD/i386
#
# For more information on this file, please read the handbook section on
# Kernel Configuration Files:
#
#
#
# The handbook is also available locally in /usr/share/doc/handbook
# if you've installed the doc distribution, otherwise always see the
# FreeBSD World Wide Web server () for the
# latest information.
#
# An exhaustive list of options and more detailed explanations of the
# device lines is also present in the ../../conf/NOTES and NOTES files.
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
# $FreeBSD: /repoman/r/ncvs/src/sys/i386/conf/GENERIC,v 1.413 2004/08/11 01:34:18 rwatson Exp $

下面这个选项在每个中都要有:

machine        i386

这是机器的架构, 他只能是 alpha, amd64, i386, ia64, pc98, powerpc, 或 sparc64 中的一种。

cpu          I486_CPU
cpu I586_CPU
cpu I686_CPU

上面的选项指定了您系统中所使用的 CPU 类型。 您可以使用多个 CPU 类型 (例如,您不确定是应该指定 I586_CPUI686_CPU)。 然而对于定制的内核, 最好能够只指定您使用的那种 CPU。如果您对于自己使用的 CPU 类型没有把握, 可以通过查看 /var/run/dmesg.boot 中的启动信息来了解。

在FreeBSD的内核里面仍然支持I386_CPU,但是在-STABLE和 -CURRENT里面缺省已经被禁用了。这就意味着安装FreeBSD在386-class的cpu,一般有下面几种情况:

  • 安装一个老的FreeBSD release并且按照Section 8.3从源码重建系统.

  • 在一个新的机器上构建用户和内核程序,然后用已经编译好的/usr/obj下的文件 安装到386的机器上(详细情况看Section 19.5)。

  • 定制您自己的 FreeBSD 发行版本, 其中的安装光盘包含 I386_CPU 支持。

第一种情况可能是最容易的, 但您需要大量的磁盘空间, 而 386-级别拥有这种配置的计算机可能很难找到。

ident          GENERIC

这是内核的名字。 您应该取一个自己的名字, 例如取名叫 MYKERNEL, 如果您一直在按照前面的说明做的话。 您放在 ident 后面的字符串在启动内核时会显示出来,因此如果希望能够容易区分常用的内核和刚刚定制的内核, 就应该采取不同的名字 (例如,您想定制一个试验性的内核)。

maxusers          n

这个 maxusers 选项设置了重要系统表的大小。这个数值粗略地假设您的机器同时会有多少用户。

从FreeBSD 4.5开始,如果手动设置这个值为0系统将会自动赋值。[5]. 在FreeBSD  5.X 和更高版本中,maxusers 如果没有定义,将缺省为 0。如果您使用的FreeBSD早于4.5, 或者您想自己设置这个值,那么您至少要设置maxusers为4, 特别是您要执行X Window或是编译程序。 原因是maxusers值决定了系统同时可有多少个进程(process), 其算法是20 + 16 * maxusers,所以如果您设置maxusers为1,则您的系统只能同时存在36个进程,包括18个(或更多)系统启动要占去的进程。 如果您执行了X Window,则又要用掉15个以上。甚至阅读一个man page也会使用九个进程来过滤、解压缩、然后显示文件。 设置maxusers到64将允许您有1044个进程,对任何人应该都是足够的。当您执行程序时, 得到像是proc table full这样的错误信息,或者您要建一个同时会有很多人来访问的网站(比如ftp.FreeBSD.org)时, 您就要增加这个设置的值,然后重新编译内核。

Note: maxusers不会 限制能够登录到您机器上的用户数量。它只是简单地设置一些系统表的尺寸,以适应您的系统中登录这样多的用户时能够执行的最大进程数。 确实 会限制同时能够登录的远程用户以及 X 终端窗口的关键字是 pseudo-device pty 16。 在 FreeBSD 5.X 中, 您并不需要担心这个数值, 因为 pty(4) 驱动提供了 “自动克隆(auto-cloning)” 的能力;在配置文件中您只需简单地指定 device pty 就可以了。

# Floating point support - do not disable.
device npx

npx 是 FreeBSD 中浮点运算单元的接口,用于支持硬件的浮点运算协处理器, 以及软件仿真程序。 这个设置 不是 可有可无的。

# Pseudo devices
device loop # Network loopback

这是 TCP/IP 的通用回环设备。 如果您 telnet 或 FTP 到 localhost (也就是 127.0.0.1) 则将通过这个设备回到本机。 这个设备是 必需的。 在 FreeBSD 4.X 中,则应使用 pseudo-device loop

接下来的那些项有一个或多个选项,关于每个选项的更多的信息参考下面注释。

#To statically compile in device wiring instead of /boot/device.hints
#hints "GENERIC.hints" # Default places to look for devices.

在FreeBSD 5.X和更新的版本里面,device.hints(5)被用来配置设备驱动选项。在启动的时候loader(8)将会检查缺省位置/boot/devicehints。 使用hints选项您就可以把这些hints静态编译进内核。 这样就没有必要在/boot下创建devicehints

#makeoptions     DEBUG=-g          # Build kernel with gdb(1) debug symbols

一般的 FreeBSD 构建过程并不包括调试信息, 在构建内核时,绝大多数符号会在最终的内核连接之后剔除出去, 以节省安装时所需的空间。 如果您打算测试 -CURRENT 分支的内核, 或开发您自己的 FreeBSD 内核功能, 则可能会需要去掉这一行的注释。这将启用 -g 选项, 它会在 gcc(1) 中打开调试信息。 如果您使用 “传统” 方法来构建内核, 也可以通过 config(8)-g 选项来达到同样的目的 (参见 Section 8.3 了解进一步的信息)。

options          SCHED_4BSD         # 4BSD scheduler

这是 FreeBSD 的传统调度器。 取决于您系统的工作负荷, 使用新的 ULE 调度器通常可以获得更好的性能。 它是专门为 FreeBSD 在 SMP 上运行而设计的调度器, 但在 UP 系统上也能工作得很好。 如果您想试验这个功能, 则应把配置文件中的 SCHED_4BSD 改为 SCHED_ULE

options          INET              # InterNETworking

网络支持,即使您不打算连网,也请保留它,大部分的程序至少需要回环网络(就是和本机进行网络连接),所以强烈要求保留它。

options          INET6             # IPv6 communications protocols

这将打开IPv6连接协议。

options          FFS               # Berkeley Fast Filesystem

这是最基本的硬盘文件系统,如果打算从本地硬盘启动,请保留它。

options          UFS_ACL           # Support for access control lists

这个选项只能在 FreeBSD 5.X 和更高版本中使用, 它将启用内核中的访问控制表的支持。这依赖于扩展属性以及 UFS2, 以及在 Section 14.13 中所介绍的那些特性。 ACL 默认是启用的, 并且如果已经在文件系统上使用了这一特性,就不应再关掉它, 因为这会去掉文件的访问控制表,并以不可预期的方式改变受保护的文件的访问方式。

options          UFS_DIRHASH       # Improve performance on big directories

通过使用额外的内存,这个选项可以加速在大目录上的磁盘操作。您应该在大型服务器和频繁使用的工作站上打开这个选项,而在磁盘操作不是很重要的小型系统上关闭它,比如防火墙。

options          SOFTUPDATES       # Enable FFS Soft Updates support

这个选项将启用内核的 Soft Updates, 它有助于提高磁盘的写操作速度。尽管这个功能是内核提供的, 仍然需要对具体的磁盘打开它。 请查看 mount(8) 的输出以了解 Soft Updates 是否已经在您的系统磁盘上启用了。 如果您没有看到 soft-updates 挂接选项, 则需要通过使用 tunefs(8) (对于已经存在的文件系统) 或 newfs(8) (对于新的文件系统) 命令来激活它。

options          MD_ROOT           # MD is a potential root device

这个选项将打开以基于内存的虚拟磁盘作为根设备的支持。

options          NFSCLIENT         # Network Filesystem Client
options NFSSERVER # Network Filesystem Server
options NFS_ROOT # NFS usable as /, requires NFSCLIENT

网络文件系统。 如果您不打算通过 TCP/IP 挂接 UNIX 文件服务器的分区, 就可以注释掉它。

options          MSDOSFS           # MSDOS Filesystem

MS-DOS 文件系统。 只要您不打算在启动时挂接由 DOS 格式化的硬盘分区, 就可以把它注释掉。 如前面所介绍的那样, 在您第一次挂接 DOS 分区时,内核会自动加载需要的模块。 此外, emulators/mtools 软件提供了一个很方便的功能,通过它您可以直接访问 DOS 软盘而无需挂接或卸下它们 (而且也完全不需要 MSDOSFS)。

options          CD9660            # ISO 9660 Filesystem

用于 CDROM 的 ISO 9660 文件系统。 如果没有 CDROM 驱动器或很少挂接光盘数据 (因为在首次使用数据 CD 时会自动加载), 就可以把它注释掉。 音乐 CD 并不需要这个选项。

options          PROCFS            # Process filesystem

进程文件系统。 这是一个挂接在 /proc 的一个 “伪装的” 文件系统, 允许类似 ps(1) 这样的程序给出正在运行的进程的更多信息。 在 FreeBSD 5.X 和更高版本中, 绝大多数情况下都不再需要 PROCFS,因为绝大多数调试和监视工具都已经进行了修改, 不再需要 PROCFS:与 FreeBSD 4.X 不同, 新安装的 FreeBSD 5.X 默认情况下并不挂接它。 此外, 6.X-CURRENT 内核在使用 PROCFS 时还必须加入 PSEUDOFS 的支持:

options          PSEUDOFS          # Pseudo-filesystem framework

PSEUDOFS 在 FreeBSD 4.X 上不可用。

options          GEOM_GPT          # GUID Partition Tables.

这个选项提供了在一个磁盘上使用大量的分区的能力。

options          COMPAT_43         # Compatible with BSD 4.3 [KEEP THIS!]

使系统兼容4.3BSD。不要去掉这一行,不然有些程序将无法正常运行。

options          COMPAT_FREEBSD4   # Compatible with FreeBSD4

为了支持在旧版本的FreeBSD下编译的程序,该选项在FreeBSD 5.X i386和Alpha systems下需要打开。 最好在所有的i386和Alpha systems下打开这个选项,因为可能要运行老应用程序。在5.X才开始支持的平台,比如ia64和Sparc64®,就不需要这个选项。

options          SCSI_DELAY=15000  # Delay (in ms) before probing SCSI

这将让内核在探测每个 SCSI 设备之前等待 15 秒。 如果您只有 IDE 硬盘驱动器,则可以不管它, 反之您可能会想降低这个数值, 可能减少到 5 秒, 以加速启动过程。 当然,如果您这么做之后 FreeBSD 在识别您的 SCSI 设备时遇到问题, 则您还需要再把它改回去。

options          KTRACE            # ktrace(1) support

这个选项打开内核进程跟踪,在调试时很有用。

options          SYSVSHM           # SYSV-style shared memory

提供System V共享内存(SHM)的支持,最常用到SHM的应该是X Window的XSHM延伸,不少绘图相关程序会自动使用SHM来提供额外的速度。如果您要使用X Window,您最好加入这个选项。

options          SYSVSEM           # SYSV-style semaphores

支持System V 信号量,不常用到,只在kernel中占用几百个字节的空间。

options          SYSVMSG           # SYSV-style message queues

支持 System V 消息。 同样地, 这只会在内核中增加数百字节的空间占用。

Note: ipcs(1) 命令的 -p 选项可以显示出任何用到这些 System V 机制的进程。

options         _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions

在1993年POSIX®添加的实时扩展. 在ports collection中某些应用程序会用到这些 (比如StarOffice)。

options          KBD_INSTALL_CDEV  # install a CDEV entry in /dev

这个选项与键盘有关。 它在 /dev 中安装一个 CDEV 项。

options          AHC_REG_PRETTY_PRINT     # Print register bitfields in debug
# output. Adds ~128k to driver.
options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~215k to driver.

这个选项主要用于帮助调试, 它能够给出更容易阅读的寄存器数值。

options          ADAPTIVE_GIANT    # Giant mutex is adaptive.

这个选项使得内核全局锁 (Giant) 按照和其它 mutex 类似的方式自适应地自旋。

# To make an SMP kernel, the next two are needed
options SMP # Symmetric MultiProcessor Kernel
device apic # I/O APIC

上述两个选项是 SMP 支持所必需的, 在单处理器的机器上可以去掉它们。

device          isa

所有为 FreeBSD 所支持的 PC 都需要这个设置, 即使没有 ISA 插槽也是一样。 如果您使用 IBM PS/2 (微通道架构) 的计算机, FreeBSD 目前只能提供有限的支持。 要了解关于 MCA 支持的详情,请参考 /usr/src/sys/i386/conf/NOTES

device          eisa

如果您的主机板上有EISA总线,加入这个设置。使用这个选项可以自动扫描并设置所有连接在EISA总线上的设备。

device          pci

如果您的主板有PCI总线,就加入这个选项。使用这个选项可以自动扫描PCI卡,并在PCI到ISA之间建立通路。

device          agp

如果您有图形加速卡(AGP card),这个选项将打开图形加速支持。

# Floppy drives
device fdc

这是软驱控制器。

# ATA and ATAPI devices
device ata

这个驱动器支持所有ATA和ATAPI设备。您只要在内核中加入device ata选项, 就可以让内核支持现代计算机上的所有PCI ATA/ATAPI设备。

device          atadisk                 # ATA disk drives

这个是ATAPI 磁盘驱动器所必须的。

device          ataraid                 # ATA RAID drives

这个选项需要 device ata, 它用于 ATA RAID 驱动。


device atapicd # ATAPI CDROM drives

这个是ATAPI CDROM驱动器所必须的。

device          atapifd                 # ATAPI floppy drives

这个是ATAPI 磁盘驱动器所必须的。

device          atapist                 # ATAPI tape drives

这个是ATAPI 磁带机驱动器所必须的.

options         ATA_STATIC_ID           # Static device numbering

这指定对控制器使用其静态的编号; 如果没有这个选项, 则会动态地分配设备的编号。

# SCSI Controllers
device ahb # EISA AHA1742 family
device ahc # AHA2940 and onboard AIC7xxx devices
device ahd # AHA39320/29320 and onboard AIC79xx devices
device amd # AMD 53C974 (Teckram DC-390(T))
device isp # Qlogic family
device mpt # LSI-Logic MPT-Fusion
#device ncr # NCR/Symbios Logic
device sym # NCR/Symbios Logic (newer chipsets)
device trm # Tekram DC395U/UW/F DC315U adapters

device adv # Advansys SCSI adapters
device adw # Advansys wide SCSI adapters
device aha # Adaptec 154x SCSI adapters
device aic # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
device bt # Buslogic/Mylex MultiMaster SCSI adapters

device ncv # NCR 53C500
device nsp # Workbit Ninja SCSI-3
device stg # TMC 18C30/18C50

SCSI控制器。可以注释掉您系统中没有的设备。如果您只有IDE设备,您可以把这些一起删掉。

# SCSI peripherals
device scbus # SCSI bus (required for SCSI)
device ch # SCSI media changers
device da # Direct Access (disks)
device sa # Sequential Access (tape etc)
device cd # CD
device pass # Passthrough device (direct SCSI access)
device ses # SCSI Environmental Services (and SAF-TE)

SSCSI外围设备。也可以像上面一样操作。

Note: 目前系统提供的 USB umass(4) 驱动 (以及少量其它驱动) 使用了 SCSI 子系统,尽管它们并不是真的 SCSI 设备。 因此, 如果在内核配置使用了这类驱动程序, 请务必不要删除 SCSI 支持。

# RAID controllers interfaced to the SCSI subsystem
device amr # AMI MegaRAID
device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
device ciss # Compaq Smart RAID 5*
device dpt # DPT Smartcache III, IV - See NOTES for options
device iir # Intel Integrated RAID
device ips # IBM (Adaptec) ServeRAID
device mly # Mylex AcceleRAID/eXtremeRAID
device twa # 3ware 9000 series PATA/SATA RAID

# RAID controllers
device aac # Adaptec FSA RAID
device aacp # SCSI passthrough for aac (requires CAM)
device ida # Compaq Smart RAID
device mlx # Mylex DAC960 family
device pst # Promise Supertrak SX6000
device twe # 3ware ATA RAID

支持RAID控制器。如果您没有这些,可以把它们注释掉或是删掉。

# atkbdc0 controls both the keyboard and the PS/2 mouse
device atkbdc # AT keyboard controller

键盘控制器(atkbdc)提供AT键盘输入以及PS/2指针设备的I/O服务。键盘驱动程序(atkbd)与PS/2鼠标驱动程序(psm)需要这个控制器,所以不要删除它。

device          atkbd      # AT keyboard

atkbd驱动程序,与atkbdc控制器一起使用, 提供连接到AT键盘控制器的AT 84键盘与AT加强型键盘的访问服务。

device          psm        # PS/2 mouse

如果您的鼠标连接到PS/2鼠标端口,就使用这个设备驱动程序。

device          vga        # VGA video card driver

显卡驱动。

# splash screen/screen saver
device splash # Splash screen and screen saver support

启动时出现了 splash 画面!屏幕保护程序也需要它。 在 FreeBSD 4.X 中,应写作 pseudo-device splash

# syscons is the default console driver, resembling an SCO console
device sc

sc 是默认的控制台驱动程序, 类似 SCO 控制台。由于绝大部分全屏幕程序都通过类似 termcap 这样的终端数据库函数库赖访问控制台, 因此无论您使用这个或与 VT220 兼容的 vt 都没有什么关系。如果您在运行这种控制台时使用全屏幕程序时发生问题, 清在登录之后将 TERM 变量设置为 scoansi

# Enable this for the pcvt (VT220 compatible) console driver
#device vt
#options XSERVER # support for X server on a vt console
#options FAT_CURSOR # start with block cursor

这是一个兼容 VT220 的控制台驱动, 它同时能够向下兼容 VT100/102。 在同 sc 硬件不兼容的一些笔记本上它能够运行的很好。 当然, 登录系统时请把 TERM 变量设置为 vt100vt220。 此驱动在连接网络上大量不同的机器时也被证明非常有用,因为此时 termcapterminfo 通常没有可用的 sc 设备 -- 而 vt100 则几乎每种平台都支持。

# Power management support (see NOTES for more options)
#device apm

Advanced Power Management support. Useful for laptops, although in FreeBSD 5.X and above this is disabled in GENERIC by default.

# Add suspend/resume support for the i8254.
device pmtimer

用于电源管理事件, 例如 APM 和 ACPI 的时钟设备驱动。

# PCCARD (PCMCIA) support
# PCMCIA and cardbus bridge support
device cbb # cardbus (yenta) bridge
device pccard # PC Card (16-bit) bus
device cardbus # CardBus (32-bit) bus

PCMCIA支持。如果您使用膝上型计算机,您需要这个。

# Serial (COM) ports
device sio # 8250, 16[45]50 based serial ports

这些串口在 MS-DOS/Windows 的世界中称为 COM 口。

Note: 如果使用内置式的调制解调器, 并占用 COM4 而您另有一个串口在 COM2, 则必须把调制解调器的 IRQ 改为 2 (由于晦涩的技术原因, IRQ2 = IRQ 9) 才能够在 FreeBSD 中访问它。 如果有多口的串口卡,请参考 sio(4) 以了解需要在 /boot/device.hints 中进行的设置。 某些显卡 (特别是基于 S3 芯片的卡) 使用形如 0x*2e8 的 IO 地址,而许多廉价的串口卡不能够正确地对 16-位 IO 地址空间进行解码, 因此它们会产生冲突, 并造成 COM4 实际上无法使用。

每一个串口都需要有一个唯一的 IRQ (除非您使用支持中断分享的串口卡), 因此默认的 COM3COM4 IRQ 是不能使用的。

# Parallel port
device ppc

ISA-bus并行接口。

device          ppbus      # Parallel port bus (required)

提供并行总线的支持。

device          lpt        # Printer

提供并口打印机的支持。

Note: 要使用并口打印机,就必须同时加入上面三行设置。

device          plip       # TCP/IP over parallel

这是针对并行网络接口的驱动器。

device          ppi        # Parallel port interface device

普通用途的I/O (“geek port”) + IEEE1284 I/O.

#device         vpo        # Requires scbus and da

这是针对Iomega Zip驱动器的。它要求scbusda的支持。 最好的执行效果是工作在EPP 1.9模式。

#device         puc

如果您有由 puc(4) 支持的 “哑” 串行或并行 PCI 卡, 则应去掉这一行的注释。

# PCI Ethernet NICs.
device de # DEC/Intel DC21x4x (“Tulip”)
device em # Intel PRO/1000 adapter Gigabit Ethernet Card
device ixgb # Intel PRO/10GbE Ethernet Card
device txp # 3Com 3cR990 (“Typhoon”)
device vx # 3Com 3c590, 3c595 (“Vortex”)

多种PCI网卡驱动器。注释或删除您系统中没有的设备.

# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device miibus # MII bus support

MII总线支持对于一些PCI 10/100 Ethernet NIC来说是必需的。

device          dc         # DEC/Intel 21143 and various workalikes
device miibus # MII bus support
device bfe # Broadcom BCM440x 10/100 Ethernet
device bge # Broadcom BCM570xx Gigabit Ethernet
device dc # DEC/Intel 21143 and various workalikes
device fxp # Intel EtherExpress PRO/100B (82557, 82558)
device pcn # AMD Am79C97x PCI 10/100 (precedence over 'lnc')
device re # RealTek 8139C+/8169/8169S/8110S
device rl # RealTek 8129/8139
device sf # Adaptec AIC-6915 (“Starfire”)
device sis # Silicon Integrated Systems SiS 900/SiS 7016
device sk # SysKonnect SK-984x & SK-982x gigabit Ethernet
device ste # Sundance ST201 (D-Link DFE-550TX)
device ti # Alteon Networks Tigon I/II gigabit Ethernet
device tl # Texas Instruments ThunderLAN
device tx # SMC EtherPower II (83c170 “EPIC”)
device vr # VIA Rhine, Rhine II
device wb # Winbond W89C840F
device xl # 3Com 3c90x (“Boomerang”, “Cyclone”)

使用MII总线控制器代码的驱动器。

# ISA Ethernet NICs.  pccard NICs included.
device cs # Crystal Semiconductor CS89x0 NIC
# 'device ed' requires 'device miibus'
device ed # NE[12]000, SMC Ultra, 3c503, DS8390 cards
device ex # Intel EtherExpress Pro/10 and Pro/10+
device ep # Etherlink III based cards
device fe # Fujitsu MB8696x based cards
device ie # EtherExpress 8/16, 3C507, StarLAN 10 etc.
device lnc # NE2100, NE32-VL Lance Ethernet cards
device sn # SMC's 9000 series of Ethernet chips
device xe # Xircom pccard Ethernet

# ISA devices that use the old ISA shims
#device le

ISA 以太网卡驱动。 参见 /usr/src/sys/i386/conf/NOTES 以了解关于哪个驱动程序能够驱动您的网卡的细节。

# Wireless NIC cards
device wlan # 802.11 support
device an # Aironet 4500/4800 802.11 wireless NICs.
device awi # BayStack 660 and others
device wi # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
#device wl # Older non 802.11 Wavelan wireless NIC.

Support for various wireless cards.

device   mem           # Memory and kernel memory devices

The system memory devices.

device   io            # I/O device

This option allows a process to gain I/O privileges. This is useful in order to write userland programs that can handle hardware directly. This is required to run the X Window system.

device   random        # Entropy device

Cryptographically secure random number generator.

device   ether         # Ethernet support

ether 只有在使用以太网卡时才需要。它包含了通用的以太网协议代码。在 FreeBSD 4.X 中应写作 pseudo-device ether.

device   sl            # Kernel SLIP

sl 用以提供 SLIP 支持。 目前它几乎已经完全被 PPP 取代了,因为后者更容易配置, 而且更适合调制解调器之间的连接, 并提供了更强大的功能。 在 FreeBSD 4.X 中, 这一行应写作 pseudo-device sl.

device   ppp           # Kernel PPP

这一选项用以提供内核级的 PPP 支持, 用于拨号连接。 也有以用户模式运行的 PPP 实现,使用 tun 并提供包括按需拨号在内的更为灵活的功能。 在 FreeBSD 4.X 中应写作 pseudo-device ppp.

device   tun           # Packet tunnel.

它会被用户模式的 PPP 软件用到。 参考本书的 PPP 以了解更多的细节。 在 FreeBSD 4.X 中则应使用 pseudo-device tun


device pty # Pseudo-ttys (telnet etc)

这是一个 “pseudo-terminal” 或模拟登入端口。 它用来接收连入的 telnet 以及 rlogin 会话、 xterm, 以及一些其它程序如 Emacs 等。

Note: 在 FreeBSD 4.X 中, 您应该使用 pseudo-device pty numberpty 后面的 number 用于指定要创建的 pty 数量。 如果您需要多于默认的同时 16 个 xterm 窗口或远程登录会话, 则应相应的提高这个值, 其上限是 256。

device   md            # Memory “disks”

Memory disk pseudo-devices. With FreeBSD 4.X use the line pseudo-device md.

device   gif           # IPv6 and IPv4 tunneling

它实现了在 IPv4 上的 IPv6 隧道、 IPv6 上的 IPv4 隧道、 IPv4 上的 IPv4 隧道、 以及IPv6 上的 IPv6隧道。 从 FreeBSD 4.4 开始 gif 设备具有了 “自动克隆” 能力, 因此只需指定 pseudo-device gif。更早版本的 FreeBSD 4.X 需要手工指定一个数字, 例如 pseudo-device gif 4

device   faith         # IPv6-to-IPv4 relaying (translation)

这个伪设备能捕捉发给它的数据包,并把它们转发给 IPv4/IPv6 翻译服务程序。在 FreeBSD 4.X 中,应写作 pseudo-device faith 1

# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
device bpf # Berkeley packet filter

这是 Berkeley 包过滤器。这个伪设备允许网络接口被置于混杂模式, 从而,截获广播网 (例如,以太网) 上的每一个数据包。 截获的数据报可以保存到磁盘上,也可以使用 tcpdump(1) 程序来分析。 在 FreeBSD 4.X 中,应写作 pseudo-device bpf

Note: bpf(4) 设备也被用于 dhclient(8) 来获取默认路由器(网关)的 IP 地址。如果使用DHCP,就不要注释掉这行。

# USB support
#device uhci # UHCI PCI->USB interface
#device ohci # OHCI PCI->USB interface
device usb # USB Bus (required)
#device udbp # USB Double Bulk Pipe devices
device ugen # Generic
device uhid # “Human Interface Devices”
device ukbd # Keyboard
device ulpt # Printer
device umass # Disks/Mass storage - Requires scbus and da
device ums # Mouse
device urio # Diamond Rio 500 MP3 player
device uscanner # Scanners
# USB Ethernet, requires mii
device aue # ADMtek USB Ethernet
device axe # ASIX Electronics USB Ethernet
device cue # CATC USB Ethernet
device kue # Kawasaki LSI USB Ethernet
device rue # RealTek RTL8150 USB Ethernet

支持各类 USB 设备。

# FireWire support
device firewire # FireWire bus code
device sbp # SCSI over FireWire (Requires scbus and da)
device fwe # Ethernet over FireWire (non-standard!)

支持各类火线设备。

要了解 FreeBSD 所支持的设备的其他情况, 请参考 /usr/src/sys/i386/conf/NOTES


大内存配置的机器需要超过4GB的虚拟地址。 因为4GB的限制,Intel在Pentium及后续的CPUs上增加了36位物理地址的支持。

Intel Pentium Pro和后续的CPUs允许内存地址扩展到64GB.(

如果您在运行 FreeBSD 5.0 或更高版本,则可以略过这节。 新版本使用 devfs(5) 来分配设备节点,这一过程对用户是透明的。

内核中的几乎每个设备在 /dev 目录中都有对应的 “节点” 项。这些节点看上去像是普通的文件, 但事实上却是程序在使用对应的设备时, 与内核联系的入口。 Shell 脚本 /dev/MAKEDEV 在首次安装操作系统时会创建几乎所有能够支持的设备节点。 然而, 它并不会创建 所有的 节点,因此当您增加了某些设备的支持时, 就需要检查这个目录中是否有对应的项了, 如果没有,就应该添加它们。 这有一个简单的例子:

假定在内核中加入了IDE CD-ROM的支持。可以这样加入:

device acd0

这意味着您应当在/dev目录下找一些以acd0为起点的入口, 通常后面有一个字母,像是以c,或者r开头,表示这是一个“raw”设备。如果那些文件不在那儿,就必须改变到/dev目录然后键入:

# sh MAKEDEV acd0

这些脚本完成后,您要在/dev目录下确认有acd0cracd0c等几个入口,这表示程序已经正确执行。

以下是加入声卡节点的例子:

# sh MAKEDEV snd0

Note: 当创建完诸如声卡这样的设备节点时,如果其他人有权访问您的机器,可能有必要在/etc/fbtab文件中添加这些节点来保护系统安全。更多的信息参考fbtab(5)

依上述的简单程序,建立任何不在GENERIC里的硬件设备节点

Note: 所有的SCSI控制器都使用一样的设备节点,所以您无须重新建立节点。另外,网卡与SLIP/PPP虚拟设备并没有任何设备节点,所以您不必担心怎么建立节点。


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

config失败:

如果 config(8) 在给出您的内核描述时失败, 则可能在某些地方引入了一处小的错误。 幸运的是, config(8) 会显示出它遇到问题的行号, 这样您就能够迅速地定位错误。 例如, 如果您看到:

config: line 17: syntax error

可以通过与 GENERIC 或其他参考资料对比,来确定这里的关键词是否拼写正确。

make失败:

如果 make 命令失败, 它通常表示内核描述中发生了 config(8) 无法找出的的错误。 同样地, 仔细检查您的配置, 如果仍然不能解决问题, 发一封邮件到 并附上您的内核配置, 则问题应该很快就能解决。

安装新内核失败:

如果内核编译得很顺利, 但安装失败 (即 make installmake installkernel 命令失败), 第一件事是检查您的系统是否是以 1 或更高的安全级运行的 (参见 init(8))。 内核安装过程将尝试去掉原有内核的 immutable (不可改) 标志, 并在新的内核上设置它。 由于安全级 1 或更高的安全级会阻止修改系统中任何文件的这个标志, 因此安装内核需要 0 或者更低的安全级。

不过这只对 FreeBSD 4.

阅读(2353) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~