电脑技术学习

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

dn001

缺省内核配置选项

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

#
# 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选项使得配置程序对待内核更 为谨慎和保守,从而增加了系统的安全性。

  USERCONFIGVISUAL_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

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

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

controller	isa0
controller	eisa0
controller	pci0

  这三行定义了三种控制器的基本支持代码:ISAEISAPCI总线控 制器。

  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是支持标准软盘控制器的基本代码,一般个人计算机能支持两个软盘驱动器, fd0fd1设备。 通过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驱动,那么或者会需要 设置XSERVERFAT_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、sio2sio3为四个标准串口设备,其中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设备还不是很流行,但它是未来发展的 一个趋势。

未完,待续。。。  

标签: