FreeBSD连载60:缺省内核配置选项

来源:岁月联盟 编辑:zhu 时间:2008-01-17
FreeBSD连载60:缺省内核配置选项内容简介:【FreeBSD教程】缺省内核配置选项 通用内核的设置文件中包含了很多比较重要的设置选项,这里的设置选项也是最常用的配置选项,为了编译出适合自己计算机的设置,就需要了解这个文件中的设置选项。 # # GENERI

  【FreeBSD教程】缺省内核配置选项

  通用内核的设置文件中包含了很多比较重要的设置选项,这里的设置选项也是最常用的配置选项,为了编译出适合自己计算机的设置,就需要了解这个文件中的设置选项。

#
# GENERIC -- Generic machine with WD/AHx/NCR/BTx family disks
#
# For more information read the handbook part System Administration ->
# Configuring the FreeBSD Kernel -> The Configuration File.
# The handbook is available in /usr/share/doc/handbook or online as
# latest version from the FreeBSD World Wide Web server
# <URL:http://www.FreeBSD.ORG/>
#
# An exhaustive list of options and more detailed explanations of the
# device lines is present in the ./LINT configuration file. If you are
# in doubt as to the purpose or necessity of a line, check first in LINT.
#
# $Id: GENERIC,v 1.143.2.2 1999/02/15 02:50:07 des Exp $

machine "i386"
cpu "I386_CPU"
cpu "I486_CPU"
cpu "I586_CPU"
cpu "I686_CPU"
ident GENERIC
maxusers 32

  machine行定义了系统所使用的计算机体系结构,对于运行在个人计算机平台上的FreeBSD,此参数值只能是i386,运行在其他平台上的BSD系统将使用其他相应设置。注重由于这个配置参数中混用了字母和数字,因此需要用引号将其括起来。这种情况在配置文件中经常会碰到,假如不使用双引号括起来,配置程序就不能区分它是用于标识字符串还是用于数值设置,造成语法错误。

  可以多个cpu参数描述了处理器类型,可以使用 ”I386_CPU” 、 “I486_CPU” 、 “I586_CPU” 、 “I686_CPU” 四种类型。 “I386_CPU” 是最低配置,缺省的GENERIC配置文件中将这些类型全部列出,这使得这个通用内核在任何个人计算机系统下都能正常运行,但最好根据处理器类型进行针对配置。由于处理器是向下兼容的,但不能向上兼容,因此假如配置的参数高于计算机实际处理器类型,内核就不能正常启动和工作。

  对于586以上的处理器,各个兼容厂商的标记方法各不相同,因此必须小心选择正确的处理器类型,以避免选择错误。可以使用系统启动时的检测信息来判定处理器的类型:

  # dmesg | grep ^CPU

  ident用于标识内核,每个内核都应该具有自己的标识,GENERIC内核的标识为GENERIC,而自己定制的内核可以在这一行中定义自己的标识。由于系统中可能存在有多个内核,因此使用这个标识来帮助区分不同的内核。这个标识在系统启动时将显示在启动屏幕上。

  maxusers这个值并不直接限制FreeBSD的用户数目,而是定义了内核中的一些非常重要的系统表格大小,这些表格会随系统中进程的增加和资源的被占用会逐渐被填满,而系统中的用户和进程数量有一定的关系,因此这个值大概等于系统同时答应的用户数目。但是当用户使用X Winodw或其他产生了大量进程和应用程序时,即使只有很少的用户,系统表格也很轻易被填满。因此这个值不能设置的太小。尤其是要将FreeBSD 用作服务器的时候,服务器会启动大量的进程,往往要增大这个值以提升系统对高负载的支持能力。

  系统的进程表的大小为:20 16*maxusers,去除系统启动时自动启动的一些守护进程数目,因此可以大致估计出系统中空余的进程表项。进而估计出系统中还可以容纳的进程数目,因此就可以根据需求改变这个值的设置。

options MATH_EMULATE #Support for x87 emulation
options INET #InterNETworking
options FFS #Berkeley Fast Filesystem
options FFS_ROOT #FFS usable as root device [keep this!]
options MFS #Memory Filesystem
options MFS_ROOT #MFS usable as root device, "MFS" req'ed
options NFS #Network Filesystem
options NFS_ROOT #NFS usable as root device, "NFS" req'ed
options MSDOSFS #MSDOS Filesystem
options "CD9660" #ISO 9660 Filesystem
options "CD9660_ROOT" #CD-ROM usable as root. "CD9660" req'ed
options PROCFS #Process filesystem
options "COMPAT_43" #Compatible with BSD 4.3 [KEEP THIS!]
options SCSI_DELAY=15000 #Be pessimistic about Joe SCSI device
options UCONSOLE #Allow users to grab the console
options FAILSAFE #Be conservative
options USERCONFIG #boot -c editor
options VISUAL_USERCONFIG #visual boot -c editor

config kernel root on wd0

  MATH_EMULATE选项是一个x87浮点运算模拟器,当计算机中没有x87协处理器时才需要使用。当前586级以上处理器的处理器内部均已集成了浮点运算器件,因此除非使用386芯片或部分低档486芯片,内核配置并不需要这种模拟功能。此外,另一个具有相同功能的选项为GPL_MATH_EMULATE,这个选项性能更好,只是它使用GNU的数学函数代码,而GNU公用许可比BSD许可要求更严格。因为这个版权的原因,缺省使用 MATH_EMULATE,这保证FreeBSD可以只以二进制形式向外发布,而不违反GNU许可。由于两个选项功能相同,只能任选一种,不能同时使用这两个选项。

  INET选项定义了基本的TCP/IP支持,由于FreeBSD是网络操作系统,因此这是最基本的选项。

  FFS为BSD快速文件系统,即UFS文件系统,这是FreeBSD使用的基本文件系统。FFS_ROOT用于在UFS系统上启动系统, 答应将UFS文件系统用作根文件系统。由于UFS是FreeBSD使用的最基本的文件系统,因此应该设置FFS_ROOT,以使系统能够从磁盘上正常启动。

  NFS为Sun公司开发的网络文件系统,它是Unix之间共享文件系统一种事实标准。NFS文件系统也可以用作根文件系统,这通过NFS_ROOT选项进行定义,使得可以配置FreeBSD无盘工作站,无盘的FreeBSD系统可以用于专用X终端等非凡场合。

  "CD9660"为ISO 9660 格式的CD-Rom文件系统,使用它访问CD-Rom上的文件系统。"CD9660_ROOT"使得可以用光盘作根文件系统。

  MFS为内存映射文件系统,可以将内存映射为文件系统,改善文件系统的性能,当然这只适合有大量物理内存和交换空间的系统。也可以使用mfs类型来将交换分区安装到某个目录上,保存一些临时文件。例如,系统的交换分区为wd0s3b,那么可以使用 “mount -t mfs /dev/wd0s3b /tmp” ,将交换分区安装到/tmp目录上。由于tmp是临时目录, 被程序用来交换数据,使用mfs文件系统能提高访问速度,这是拥有大量内存的计算机使用 mfs较常用的方式。MFS_ROOT用于将内存映射文件系统用作根文件系统,FreeBSD的安 装软盘就是使用的这种根文件系统,此外,使用MFS_ROOT也用于将FreeBSD系统用作专用防火 墙的嵌入式操作系统。

  当安装了系统源代码之后,可以很轻易生成能运行在一张软盘上的FreeBSD系统,叫做 PicoBSD,它主要被用做路由器、防火墙等专用服务器等。

  MSDOSFS选项定义了msdos的fat文件系统,这不是必要的文件系统选项,使用它来访问本地硬盘上的msdos文件系统。假如要访问软盘上的msdos文件系统,使用mtools软件更为方便。

  PROCFS是一个伪文件系统,它被安装到/proc目录,用于访问与相应的进程相关的信息,一些系统程序如ps,使用它来获得进程的信息。

  此外,"EXT2FS"选项为Linux所使用Ext2fs类型的文件系统,假如用户的计算机上还运行着Linux,并希望使用FreeBSD访问本地硬盘上的Linux文件系统,就需要这个选项。

  FreeBSD 2.x以后版本是从4.4BSD发展来的,但FreeBSD 1.x是来自于4.3BSD的。4.3BSD是一个非常重要的BSD版本,很多应用程序也是依照4.3BSD开发的。因此需要使用这个"COMPAT_43" 选项保持和基于4.3BSD(包括FreeBSD 1.x)应用程序的兼容性。

  SCSI设备在设置时需要一定的延迟时间,以便使SCSI控制卡能正确的和SCSI设备通信。因此需要定义SCSI_DELAY=15000选项,与其他选项不同,这个选项为数值设置,使用了赋值符号和数字。这个值的单位为毫秒

  UCONSOLE选项使用户能接管console,通常在使用X Window时比较有用,这样就能在 X Window下接管console输出的与系统相关的信息。FAILSAFE选项使得配置程序对待内核更为谨慎和保守,从而增加了系统的安全性。

  USERCONFIG和VISUAL_USERCONFIG这两个选项使用户可以在启动时进入内核参数设置程序UserConfig,配置硬件参数。USERCONFIG参数只提供基本命令行配置功能,而 VISUAL_USERCONFIG进一步提供全屏的编辑功能。

  config行指定内核文件名及其位置,它指定内核名为kernel,并且内核所在的根文件系统位于wd0硬盘上,根文件系统即为wd0a。FreeBSD习惯上使用kernel作为内核的文件名,不应改变。而它的位置wd0可能会根据硬件设置的不同而不同,例如:假如将FreeBSD安装到了SCSI硬盘上,则内核和根文件系统的位置就为da0中的分区。

# To make an SMP kernel, the next two are needed
options SMP # Symmetric MultiProcessor Kernel
options APIC_IO # Symmetric (APIC) I/O
# Optionally these may need tweaked, (defaults shown):
#options NCPU=2 # number of CPUs
#options NBUS=4 # number of busses
#options NAPIC=1 # number of IO APICs
#options NINTR=24 # number of INTs

  假如用户的计算机有多个处理器,就需要取消注释,使用这几个选项以进行支持。一般 SMP和APIC_IO是最基本的两个设置选项,SMP选项是用于支持对称多处理器SMP结构的基本代码,APIC_IO支持APIC IO方式对称I/O。使用这两个选项之后,系统就能自动检测出所使用的处理器个数以及其他系统资源。当然也可以手工指定这些资源设置,这用于不能正确侦测处理器数目时使用。缺省内核不支持多处理器,因此对于多处理器系统必须重新生成内核。

  由于只有586以上的芯片才支持SMP,因此这需要在cpu行的设置中删除386和486行的设置,明确指定处理器的类型。否则就会发生逻辑冲突。

controller isa0
controller eisa0
controller pci0

  这三行定义了三种控制器的基本支持代码:ISA、EISA和PCI总线控制器。

  ISA总线类型是个人计算机的标准配置,很多驱动程序代码都基于ISA控制器的代码,因此系统必须对ISA总线进行支持。EISA总线类型是ISA的扩展,使用在一些较老型号的服务器中,今天已经逐渐被PCI总线代替,它是可选的。PCI选项支持PCI总线设备的通用代码,当前PCI总线主板是个人计算机的主流,这个选项也是必须的。

  假如用户的计算机不存在EISA总线,可以删除对EISA选项的支持。但是,由于后面设置的一些设备是EISA总线类型的设备,依靠这个选项的支持,必须同时也必须删除所有的EISA总线类型的设备,否则就存在逻辑错误。配置程序并不会自动删除那些并不存在的设备选项,这样就导致直到编译时才会发现EISA总线设备的驱动程序发生编译错误,编译不能正常完成。

controller fdc0 at isa? port "IO_FD1" bio irq 6 drq 2
disk fd0 at fdc0 drive 0
disk fd1 at fdc0 drive 1

  控制器fdc0是支持标准软盘控制器的基本代码,一般个人计算机能支持两个软盘驱动器, fd0和fd1设备。 通过drive参数的值可以指定这两个软盘的顺序。fdc0使用的资源是个人计算机缺省设置,因此不存在系统探测问题。此外,虽然让内核自动探测软盘的数量没什么坏处,但删除不必要的选项可以略微加快系统启动的速度

options "CMD640" # work around CMD640 chip deficiency
controller wdc0 at isa? port "IO_WD1" bio irq 14
#controller wdc0 at isa? port "IO_WD1" bio irq 14 flags 0x00ff8004
disk wd0 at wdc0 drive 0
disk wd1 at wdc0 drive 1

controller wdc1 at isa? port "IO_WD2" bio irq 15
disk wd2 at wdc1 drive 0
disk wd3 at wdc1 drive 1

options ATAPI #Enable ATAPI support for IDE bus
options ATAPI_STATIC #Don't do it as an LKM
device acd0 #IDE CD-ROM
device wfd0 #IDE Floppy (e.g. LS-120)

  前面的这些选项是用于支持IDE驱动器及硬盘的配置,事实上这些设置不但支持IDE驱动器,还支持一些较老的ST506或ESDI界面的硬盘设备,虽然那些硬盘设备已经淘汰,没有人再使用它们了。

  "CMD640"用于修正使用CMD640控制芯片的系统主板的问题,wdc0是第一个IDE接口控制器,wdc1为第二个IDE控制器,一个个人计算机系统中只能存在两个标准IDE控制器,并且一个IDE驱动器能带两个硬盘设备,因此wdc0上能连接两个硬盘wd0和wd1,wdc1能连接wd2和wd3。其中wd0和wd2为主硬盘,wd1和wd3为从硬盘。当然可以通过指定磁盘的参数at和drive参数的设置,改变硬盘号的顺序。

  由于IDE经过了一个长期的发展,控制器是由不同的制造厂商制造的,因此在一些细微的方面也存在有差异,主要是新的控制器能够支持更强的传输模式,当然它也支持原有的兼容模式。为这些细小的差异没有必要重写驱动程序,只需要更改配置行中的参数设置,就能支持某些IDE控制器的高级功能。

  每个控制器都有长32位的flags标志位,用于定义IDE硬盘的I/O类型,其中前16位定义 drive 1的标志,后16位定义drive 0的标志。例如wdc0的标志为0x00ff8004,表示定义了wd0的标志为0x8004,使用32位I/O每次传送4个扇区,而wd1设置为0x00ff,不探测32位传输而使用兼容模式。这个标志也可以分割为两个16位的部分,也在每个磁盘设备的标志中定义。

  IDE控制器中还支持光盘驱动器,首先需要ATAPI提供IDE界面使用的ATAPI类型光驱基本代码, ATAPI_STATIC这一选项使ATAPI代码直接编译到内核文件中,而不编译为可加载模块。而acd0就为IDE光驱的驱动程序。由于光驱就是连接在IDE控制器上,因此IDE接口的光驱还需要相应IDE驱动器的支持,例如光驱接在第二个IDE控制器上,则必须增加wdc1控制器选项。假如光驱上的主/从(master/slave)跳线不正确,就不能正确侦知IDE光驱,很多IDE光驱出厂设置位从设备,在该IDE总线上没有其他设备的情况下,应该将光驱跳为主设备。

  2.2和3.0release版本使用wcd0作光驱的驱动程序,而acd0是3.1-stable使用的新CD-ROM驱动,因此从2.2.x或3.0-release升级到3.1-stable时,要更改设置文件中的原wcd0项为acd0项。以后随着系统的发展,老wcd0的代码会完全删除,新代码的驱动名字会恢复为wcd0。

  wfd0为IDE接口的软盘驱动器,某些zip驱动器需要这个驱动器的支持。

# A single entry for any of these controllers (ncr, ahb, ahc) is
# sufficient for any number of installed devices.
controller ncr0
controller ahb0
controller ahc0
controller isp0

# This controller offers a number of configuration options, too many to
# document here - see the LINT file in this directory and look up the
# dpt0 entry there for much fuller documentation on this.
controller dpt0

controller adv0 at isa? port ? cam irq ?
controller adw0
controller bt0 at isa? port ? cam irq ?
controller aha0 at isa? port ? cam irq ?
#controller aic0 at isa? port 0x340 bio irq 11

controller scbus0
#controller scbus1 at ahc1 bus 0

device da0
#disk da0 at scbus0 target 0 unit 0

device sa0
device pass0
device cd0 #Only need one of these, the code dynamically grows

  对于网络服务器来讲,SCSI控制器是理想的选择,因为SCSI设备不需要占用计算机处理器的处理能力,因此适合经常发生并发存取的服务器系统。FreeBSD 3.0之后的SCSI驱动代码已经完全重写,新的代码更高效,并支持更多新设备。

  对于不同的SCSI设备,需要不同的SCSI控制器驱动程序,例如aha0为支持使用Adaptec 154x 芯片SCSI控制器的驱动程序,内核配置文件LINT和安装介质中的HARDWARE.TXT中也列出了FreeBSD支持的 SCSI控制器对应的各个选项。需要根据自己计算机上的SCSI卡的具体型号进行选择。确定了具体的驱动之后,可以删除和添加相应的控制行,但需要注重最好不要改变配置文件中控制器的前后顺序,因为配置顺序决定系统检测硬件的顺序,那么配置顺序不正确有可能造成错误的检测结果。

  scbus0控制器提供基本的SCSI总线驱动代码,当不使用参数的时候,这个控制器将自动和检测到的某个SCSI控制器联系起来。在已经了解系统拥有的控制器的条件下,可以使用at参数手工指定某个序号的SCSI总线位于哪个SCSI控制器上,一般一个SCSI控制器可以有几个SCSI总线通道。上例中注释中的 scbus1总线控制器被指定为ahc1控制卡上的第一个总线,注重自动分配SCSI总线序号的方式与手工指定 SCSI总线的方式不应该混用,以避免出现冲突错误。

  da0就用于标识SCSI硬盘设备,不同的SCSI磁盘的SCSI总线scbus0,总线上的target号和逻辑单元号unit这三个参数是不同的,可以用来标识不同的SCSI硬盘。假如忽略这三个配置参数,FreeBSD按检测的顺序分配硬盘的序号。但是也可以手工指定这三个参数,确定硬盘序号。同样,手工指定和自动分配序号不能混用。

  指定总线序号并指定硬盘序号的益处是硬盘序号的顺序将与内核自动检测的顺序无关。由于每个系统中会同时存在多个SCSI总线,每个总线上可以有安装有多个SCSI设备和逻辑单元,因此在增加、移去某个磁盘时,会使其他磁盘自动分配的序号发生改变,从而使FreeBSD安装文件系统出现问题,严重的会影响正常启动。解决办法就是应该手工指定SCSI硬盘与总线、控制器的关系。

  sa0为SCSI磁带驱动器,cd0为SCSI光驱,pass0为新SCSI驱动程序CAM中的通道驱动程序。

device wt0 at isa? port 0x300 bio irq 5 drq 1
device mcd0 at isa? port 0x300 bio irq 10

controller matcd0 at isa? port 0x230 bio

device scd0 at isa? port 0x230 bio

  上面这些驱动是一些老式的ATAPI界面的光驱,这些光驱控制器一般都和声卡作在一起,当前已经很少使用这些光驱了。

# atkbdc0 controlls both the keyboard and the PS/2 mouse
controller atkbdc0 at isa? port IO_KBD tty
device atkbd0 at isa? tty irq 1
device psm0 at isa? tty irq 12

device vga0 at isa? port ? conflicts

# splash screen/screen saver
pseudo-device splash

# syscons is the default console driver, resembling an SCO console
device sc0 at isa? tty
# Enable this and PCVT_FREEBSD for pcvt vt220 compatible console driver
#device vt0 at isa? tty
#options XSERVER # support for X server
#options FAT_CURSOR # start with block cursor
# If you have a ThinkPAD, uncomment this along with the rest of the PCVT lines
#options PCVT_SCANSET=2 # IBM keyboards are non-std

device npx0 at isa? port IO_NPX irq 13

  atkbdc0为键盘控制器,atkbd0为相应的键盘设备,psm0为ps/2 类型的鼠标设备。vga0为显示驱动程序,标准的控制台程序需要它的支持。vga0的 conflicts标志指出这个驱动程序会和其他设备共享某些资源,告诉内核不要因为这个硬件发生资源冲突而认为是这个设置不正确。FreeBSD为多用户系统,一般情况下各个设备不应该相互共享资源,以避免访问冲突。除非设备不能被使用者直接访问的情况下,硬件才能共享系统资源。

  假如要取得更好的显示效果,可以使用VESA选项(options VESA),来支持800x600的控制台显示模式(能支持132x60的字符模式)。只是VESA选项不能和多处理器选项SMP共存,它也要求系统内核提供对虚拟86模式的支持,以便VESA显示子系统就能控制显示卡,所以同时需要 “options VM86” 选项。

  splash伪设备用于支持splash屏幕图象和屏幕保护功能,这能使得系统启动时展示一个图象启动标志,并能提供控制台下的屏幕保护功能。

  全称为syscon的sc0驱动程序定义了缺省的控制台设备,支持彩色和虚拟控制台模式。vt0是可以用来替换sc0驱动另一个控制台驱动程序,只有在使用有些非凡的与sc0 不兼容的硬件的时候,才需要使用这个pcvt控制台驱动程序。假如使用vt0驱动,那么或者会需要设置XSERVER、FAT_CURSOR等选项以提供更完善的支持。

  npx0为浮点协处理器的接口,这是用于支持浮点协处理器必需的选项。没有浮点协处理器的计算机必须配置数学防真MATH_EMULATE或者GPL_MATH_EMULATE以支持浮点运算。假如同时使用了这两类选项,则按照系统检测结果,当npx0被检测到时npx0就发挥作用。

#
# Laptop support (see LINT for more options)
#
device apm0 at isa? disable flags 0x31 # Advanced Power Management

# PCCARD (PCMCIA) support
#controller card0
#device pcic0 at card?
#device pcic1 at card?

  上面这些选项用来支持便携计算机,apm0用于支持高级电源治理功能,card0 控制器对PCMCIA接口的设备进行支持,需要指定相应的设备如pcic0等。

  标准的FreeBSD内核代码支持的便携计算机设备并不丰富,因此FreeBSD中有一个PAO的开发计划,专门为用于支持便携计算机。

device sio0 at isa? port "IO_COM1" flags 0x10 tty irq 4
device sio1 at isa? port "IO_COM2" tty irq 3
device sio2 at isa? disable port "IO_COM3" tty irq 5
device sio3 at isa? disable port "IO_COM4" tty irq 9

# Parallel port
device ppc0 at isa? port? net irq 7
controller ppbus0
device nlpt0 at ppbus?
device plip0 at ppbus?
device ppi0 at ppbus?
#controller vpo0 at ppbus?

  sio0、sio1、sio2和sio3为四个标准串口设备,其中sio0还可以用做终端控制台,这样专用服务器就可以不使用显示器、键盘而使用一个普通字符终端来完成控制任务,这样多个FreeBSD系统能放在专用机架上,用做专用服务器。sio0的flags规定了这个串口用做控制台的优先级,通常使用0x10就足够了,使用0x20或0x40会妨碍对这个串口进行其他正常操作。

  3.0之前的FreeBSD系统使用COMCONSOLE设置选项来达到同样的目的,这个选项在新系统中不再有效,使用sio0的flags就能达到同样的目的。

  要使用串口作控制台,还需要在/etc/ttys中定义相应的配置行,使得系统在sio0对应的ttyd0 设备上执行相应的getty命令。Packages Collection中的comconsole-0.1.tgz软件包能帮助进行这些设置。

  设备ppc0、控制器ppbus0用于支持并口设备,nlpt0为并口打印机设备,plip0为并口网络界面,ppi0用于一般目的的输入输出。vpo0为某些并口SCSI设备的控制器,因此除了并口驱动之外,也需要SCSI总线控制器scbus0和SCSI硬盘da0的支持。这些并口设备是3.1版本之后更新的并口驱动,原有的驱动为lpt0,只能支持最标准的并口模式,不能并口的新模式。

# Order is important here due to intrusive probes, do *not* alphabetize
# this list of network interfaces until the probes have been fixed.
# Right now it appears that the ie0 must be probed before ep0. See
# revision 1.20 of this file.
device ax0
device de0
device fxp0
device mx0
device pn0
device rl0
device tl0
device tx0
device vr0
device vx0
device wb0
device xl0

device ed0 at isa? port 0x280 net irq 10 iomem 0xd8000
device ie0 at isa? port 0x300 net irq 10 iomem 0xd0000
device ep0 at isa? port 0x300 net irq 10
device ex0 at isa? port? net irq?
device fe0 at isa? port 0x300 net irq ?
device le0 at isa? port 0x300 net irq 5 iomem 0xd0000
device lnc0 at isa? port 0x280 net irq 10 drq 0
device ze0 at isa? port 0x300 net irq 10 iomem 0xd8000
device zp0 at isa? port 0x300 net irq 10 iomem 0xd8000
device cs0 at isa? port 0x300 net irq ?

  由于FreeBSD是网络操作系统,因此通常计算机经常通过以太网卡或广域网卡与网络相连接。对于每个网卡设备,必须在内核配置中进行相应的配置。上述选项就用于设置不同的网络设备的驱动程序。FreeBSD缺省内核包括了对很多网卡设备的支持,这些设备的驱动程序都被编译入系统内核中,占据了大量不必要的空间。因此在定制系统内核时,最好删去计算机上不存在的网卡类型的驱动,这样也可以加快系统的硬件探测过程。假如在缺省内核中,网卡已经能正常运行,就可以使用dmesg找出正确的网卡类型。当不能确定网卡类型的时候,更改内核配置文件一定要注重顺序,因为检测顺序非常重要,由于不同的网卡驱动相互有影响,正确的检测顺序可以避免出现探测错误。

  较老的ISA网卡还需要配置参数和硬件设置相一致,就要调整网卡使用的端口地址,irq 和iomem等参数与网卡使用的真实资源相一致。这是由于生产兼容网卡的厂商太多,因此各种兼容网卡的缺省设置却并不相同,而较老的驱动程序不能自动探测设备使用的资源。新的PCI网卡就不存在这个问题,驱动程序支持PNP,可以自动探测硬件资源。

pseudo-device loop
pseudo-device ether
pseudo-device sl 1
pseudo-device ppp 1
pseudo-device tun 1
pseudo-device pty 16
pseudo-device gzip # Exec gzipped a.out's

  伪设备并不与具体的物理设备有关,但外在表现为一种设备。通常伪设备用于支持系统中与某类操作相关的基本代码。

  loop定义TCP/IP使用的loopback网络设备,这将使计算机能够通过TCP/IP堆栈内部,以127.0.0.1(通常名字定义为localhost)的IP地址访问自身。由于FreeBSD为网络操作系统,这个选项是必须的。不管计算机上有没有网络设备,FreeBSD都提供了这个loopback的伪网络设备,以提供最基本的网络功能。网络功能是FreeBSD系统的基本功能,FreeBSD上的很多程序需要网络支持才能正常运行。很多程序能使用这种网络支持,进行本机内部进程间的连接。

  ether伪设备定义了支持Ethernet协议的基本代码,Ethernet是最流行的局域网标准,假如计算机通过Ethernet网卡互相连接,就需要这个选项的支持。

  sl为支持SLIP协议的伪设备,其后的数值参数为支持的sl伪设备的数目。SLIP协议已经逐渐被PPP协议取代。因此一般可以删除这个选项。

  ppp是在内核中实现PPP协议的驱动程序,之后的数字指定了可同时使用的PPP会话的数量。用户使用这个伪设备便能使用pppd,使用PPP协议通过modem与另一台计算机相连接。

  tun为tunnel伪设备,用于建立直接的通道。它也被常用来支持PPP协议,不同在于它在内部没有实现PPP协议,而支持PPP协议的代码是在应用软件ppp中实现的。这是用户模式的PPP 支持,与伪设备ppp相比,它较轻易配置和使用。

  pty是伪终端设备,在远程登录等需要以终端方式进行连接,但又并非真实终端的应用程序中必须使用这种设备,如telnet或xterm等程序。这里定义的限制是内核答应同时创建的伪终端数,缺省设置对于个人使用还能基本满足,但假如将系统用于提供远程登录服务,例如用做BBS服务器,16个伪设备就远远不够。此外,X Window用户也会占用大量的pty设备。

  伪设备gzip是FreeBSD的另一种特性,它使FreeBSD能够运行用gzip压缩过的a.out格式执行文件,因此能节约磁盘空间。但是这种特性只支持传统的a.out格式执行文件,而FreeBSD自3.0以后,虽然仍然支持a.out格式,但标准执行程序的格式转为ELF格式。因此这个特性带来的好处就大大降低了。为了利用这个特性,可以将应用程序编译为a.out格式(使用-aout编译连接选项)。

# KTRACE enables the system-call tracing facility ktrace(2).
# This adds 4 KB bloat to your kernel, and slightly increases
# the costs of each syscall.
options KTRACE #kernel tracing

# This provides support for System V shared memory and message queues.
#
options SYSVSHM
options SYSVMSG

  配置KTRACE选项使内核答应系统调用跟踪程序ktrace能正常运行。

  SYSVSHM、SYSVMSG这个选项提供FreeBSD与System V的兼容性,其中第一个选项SYSVSHM 提供了进程间共享内存的机制,X Window系统就需要这种共享内存机制,以提高治理图形的性能。 SYSVMSG用于支持System V的消息队列,只在特定的程序中用到,如Windows 9x的模拟器wine。

# The `bpfilter' pseudo-device enables the Berkeley Packet Filter. Be
# aware of the legal and administrative consequences of enabling this
# option. The number of devices determines the maximum number of
# simultaneous BPF clients programs runnable.
#pseudo-device bpfilter 4 #Berkeley packet filter

  bpfilter即Berkeley Packet Filter,通常计算机只接收与本机有关的数据包或广播包。在网上传播的数据包,假如与本机无关,计算机将不予理会,这样的好处是减轻了处理器负担。假如要让计算机能够捕捉经过网卡的所有数据包,就要让网卡工作在混杂模式,此时就需要使用这个伪设备。后面的数字指定能同时使用这个功能的程序的数目。

  使用这个选项的目的是使计算机能捕捉数据包并进行分析,监测网络、寻找故障,一些非凡功能如DHCP的客户程序,也需要这个伪设备的支持。但这种功能假如被不正当使用,将对整个局域网的安全造成威胁,尤其是使用共享式以太网连接方式的网络,网络上传播的信息将被这台计算机所窃听。需要注重的是,不是所有的网卡都支持混杂模式,只有支持混杂模式的网卡才能使用这个功能。

# USB support
#controller uhci0
#controller ohci0
#controller usb0
#
# for the moment we have to specify the priorities of the device
# drivers explicitly by the ordering in the list below. This will
# be changed in the future.
#
#device ums0
#device ukbd0
#device ulpt0
#device uhub0
#device ucom0
#device umodem0
#device hid0
#device ugen0

#
#options USB_DEBUG
#options USBVERBOSE

  这些设置选项是用来支持USB控制器和USB设备,当前USB设备还不是很流行,但它是未来发展的一个趋势。

图片内容