当前所在位置:FreeBSD使用大全>>
FreeBSD连载(60):缺省内核配置选项(1)
 
作者:王波
 
缺省内核配置选项
  通用内核的设置文件中包含了很多比较重要的设置选项,这里的设置选项也是最常用的配置选项,为了编译出适合自己计算机的设置,就需要了解这个文件中的设置选项。

#
# 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 

#
# 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,总线上的ta
 
来源:http://freebsd.online.ha.cn/

声明:本站的文章和软件是本人从网上收集整理的(除本人的作品之外),所有版权属于作者,
如有侵犯您的权益,请指出,本站将立即改正,谢谢.

Copyright 2000 www.newok.com