|
|
| FreeBSDhandbook中文版9配制FreeBSD的内核 | | 发布日期:2005-3-28 浏览:428次 | | 关键字: | 目录 9配制FreeBSD的内核 9.1概要 第3页9.2为什么要定制一个内核? 9.3建立和安装一个定制的内核 9.4配置文件 9.5建立设备的节点 9.6如果出现问题怎么办 =============================================================
(翻译中出现的任何问题或错误,请广大读者及时反馈给我:freebsdhandbook@163.com) 9.1概要 时你需要重新配置和编译你的内核。 . . . . . . 9.2为什么要定制一个的内核? 带来很多好处。不象GENERIC内核,它需要支持很广泛的硬件设备,而定制的内核将只支持 你机器的硬件设备,这样会带来很多好处: FreeBSD使用手册 第9章配置FreeBSD的内核 内核是FreeBSD的核心。它用来管理内存,执行安全控制,网络,磁盘访问等等。而有 读完这章,你将了解到: 为什么需要建构一个定制的内核。 如何写一个内核配置文件,或修改已存在的配置文件。 如何使用内核配置文件创建和建构一个新的内核。 如何安装一个新内核。 如何在/dev中创建设备文件的入口。 如何解决一些常见的问题。 定制内核基本上是每一个UNIX用户必须经历的一关。这样做将会对你的FreeBSD系统 1.快速启动。既然系统内核只检测你机器上的硬件,那它所花费的启动时间将大大减 少。 2.较少的内存使用。一个定制的内核会比GENERIC内核使用较少的内存。这一点非常 重要,因为内核在处理时必须经常使用内存。所以,一个定制的内核对于内存较少的机 器来说是非常有用的。 3.额外的硬件支持。一个定制的内核允许你加入象声卡之类设备的支持,而这恰恰是 GENERIC内核所做不到的。 第1页FreeBSD使用手册 9.3建立并安装一个定制的内核 首先,让我们先来看一下建立内核的目录。所有提到的目录都在/usr/src/sys中,也 可以通过/sys访问。有许多子目录充当了内核的不同部分。但最重要的是/arch/conf,你 可以在这儿配置内核,然后进行编译。这里的arch也可能是i386,alpha,pc98。在一个特 殊的架构目录内,所有的东西都是为这个架构服务的;其它部分的代码是与所有平台共享的。 注意一下这个目录的逻辑结构,所有支持的硬件驱动程序、文件系统、参数选项,都放在各 自的目录下。另外,所有放在i386目录下的是只跟PC硬件有关的,而i386目录之外的其 它目录,则是FreeBSD可能移植到的平台会共享到的部分。 注意:如果你的系统没有这个/usr/src/sys目录,那么内核源代码就没有被安装。最 快速的安装方式是以root登陆,然后运行/stand/sysinstall,选择 configureDistributionssrcsys。 接着,切换到arch/conf目录,拷贝GENERIC配置文件,并给这个文件起一个容易辨认的名 称,它就是你的内核名称。例如: #cd/usr/src/sys/i386/conf #cpGENERICMYKERNEL 通常,这个名称是大写的,如果正维护着多台不同硬件的FreeBSD机器,以你机器的域 名来命名是非常好的主意。我们把它命名为MYKERNEL就是这个原因。 注意:你必须以root帐户登陆再执行下面的命令,否则你会没有权限,而导致错误。 现在,用你喜欢的文本编辑器编辑MYKERNEL。如果你是初学者,那唯一能用的编辑器 可能就是vi,它由于太复杂而不在这儿介绍了,但在参考书目中有许多书会介绍到它。然 而,FreeBSD中最容易的编辑器是ee,如果你是一个工程师,它是一个非常好的选择。你可 以很自由地改变注释行来反映你的配置情况,或你在GERNERIC中已经做的变化。如果你在 Sunos或其它BSD系统下定制过内核,那这个文件中的绝大部分将对你非常熟悉。如果你使 用的是诸如DOS这样的系统,那GENERIC配置文件就看起来非常困难,所以在下面的配置文 件章节将慢慢地、仔细地进行介绍。 注意:确信经常检查/usr/src/UPDATING,在你执行任何修改之前,记得要用最新发布 的源代码来同步你的源代码树。在这个文件中所有重要的升级都要记下来。 /sur/src/UPDATING总是符合你的FreeBSD源代码版本,而且总是比手册所说的信息更加精 确。 当你完成以上步骤之后,如果你使用的FreeBSD是4.0之前的版本的话,就执行下面的 第2页FreeBSD使用手册 命令进行编译和安装内核;如果你使用的是4.0版或是之后的版本,你的/usr/src/目录可 能已经包含了sys/子目录了。 注意:如果你设法从一个旧版本的FreeBSD升级你的内核,你可能必须从你得到新内核 源代码的地方,找到新版的配制文件,重建并安装它。 #/usr/sbin/configMYKERNEL #cd../../compile/MYKERNEL #makedepend #make #makeinstall 如果你刚升级到一个比较新的版本,确信你已经重建了整个系统,然后运行下面的命令: #cd/usr/src #makebuildkernelKERNCONF=MYKERNEL #makeinstallkernelKERNCONF=MYKERNEL 如果你还没有升级你的源代码树,那你应当按顺序执行: config,makedepend,make,makeinstall 警告:如果你已经升级了你的源代码,你必须使用makebuildkernel方法来定制你的 内核。否则,用旧的工具来定制内核,可能会引起错误。如果你已经升级了源代码,不要 使用config/make来定制内核。 新的内核将会被拷贝到/kernel目录下,而旧的内核将会被移到/kernel.old。现在, 关闭系统,然后重新用你的内核启动系统。如果发生错误,在这章结尾会有一些故障的解决 办法。一旦你的新内核不能启动,请务必读一下有关如何恢复的章节。 注意:如果你已经加入了新的设备(如声卡),你可能在使用之前,要先在你的/dev目 录下加入这些设备节点。 9.4配置文件 内核设置的格式是很简单的,每一行包含了一个关键词(keyword)与一个或多个参数, 而大多数的设置都只包含一个参数。#号之后的文字都是注释,会被程序忽略掉。下面的每 个小节,将依次介绍每个列在GENERIC中的参数,虽然各相关主题(如网络)的关键词会放在 同一小节,但是这些关键词可能位于GENERIC的很多地方。详细地列出各个选项(option), 而LINT列出了绝大部分的选项(options),比起在同一目录下的GENERIC,有更详细的解释。 第3页FreeBSD使用手册 如果你不能确定某一行设定的目的是否必要,请先看看LINT。 目前内核在处理各个选项上正转到一个比较好的模式。一般地,设置文件中的各个选项 都转换到内核程序的Makefile中,属于CFLAGS的一个-D参数。时间一长,就造成了一个 选项处理机制的问题,没有人知道在哪个文件中参考使用了那个选项。 在新的机制中,使用#ifdef来参考选项的程序代码是存放在由执行config时所产生的 opt_foo.h。由config所产生的有效的选项清单存储在两个文件里:独立于系统架构的选项 放在/sys/conf/options,与系统架构有关的选项则放在/sys/arch/conf/options.arch,其 中arch的一个例子便是i386。 数字的引号限制(Quotingnumbers):目前所有FreeBSD版本,包括3-stable 版,其内核设置文件中如果有任何属于文字形式的数字(如i386),必须用双引号引 起来,不然执行config时会出错。 如果数字是表示数目、个数,如maxuser64这个设置,则不要加双引号。目 前FreeBSDCURRENT版本已经去掉上述限制,不论是哪种形式的数字都不需要加双 引号。本章的例子,在文字形式的数字前后仍加了双引号(“”),如果你使用FreeBSD CURRENT,请自动去除双引号。 下面是一个带有很多额外注释的GENERIC内核配置文件的例子。这个例子与 /usr/src/sys/i386/conf/GENERIC非常相似。有关内核配置的最详细的选项,请参 看/usr/src/sys/i386/conf/LINT。 # #GENERIC--GenerickernelconfigurationfileforFreeBSD/i386 # #Formoreinformationonthisfile,pleasereadthehandbooksectionon #KernelConfigurationFiles: # #http://www.FreeBSD.org/handbook/kernelconfig-config.html # #Thehandbookisalsoavailablelocallyin/usr/share/doc/handbook #ifyou'veinstalledthedocdistribution,otherwisealwaysseethe #FreeBSDWorldWideWebserver(http://www.FreeBSD.ORG/)forthe 第4页FreeBSD使用手册 #latestinformation. # #Anexhaustivelistofoptionsandmoredetailedexplanationsofthe #devicelinesisalsopresentinthe./LINTconfigurationfile.Ifyouare #indoubtastothepurposeornecessityofaline,checkfirstinLINT. # #$FreeBSD:src/sys/i386/conf/GENERIC,v1.2462000/03/0916:32:55jlemonExp $ 下面这个选项在每个内核中都要有: machinei386 上面的选项指出了在你的系统中所用的CPU类型。你可以使用多个CPU类型(例如,你 不确信你使用的是I586_CPU还是I686_CPU),然而,对于一个定制的内核,最好是只指定 你所拥有的CPU类型。如果你不能确定你的CPU类型,你可以使用dmesg命令来看看你的启 动信息。 Alpha结构的机器使用下面的选项: cpuEV4 cpuEV5 如果你正使用一台Alpha机器,你应当使用上面的CPU类型。 identGENERIC ident是一个内核的标识符。你应该自己命名一个容易辨认的名称,以有别于GENERIC 的名称─GENERIC。放在ident后的参数,将在你用这个内核启动时显示在屏幕上。如果你 同时设置了几个内核,采用不同的名称是个不错的主意。 注意,象machine与cpu这两个设置。如果你的内核名称包含数字,请记得用双引号把 它括起来。内核名称将会使用-D参数传给编译器,所以不要用像DEBUG或是其它可能干扰 编译器的机器、CPU名称,如vax。 maxusers32 这个设置的大小值定义了重要的systemtables。这个数值粗略地假设你的机器同时会 有多少使用者。然而,在一般情况下,你最少要设置4个以上,特别是你要执行XWindow 或是编译程序。原因是maxusers值决定了系统同时可有多少个进程(processes),其算法 是20 16*maxusers。如果你设置maxusers值是1,则你的系统只能同时存在36个 第5页FreeBSD使用手册 processes,包括18个(或更多)系统启动要占去的processes;如果你执行了XWindow,则 又要用掉15个以上。甚至阅读一个manpage也会使用九个processes来过滤、解压缩、然 后显示文件。设置maxusers=4,则系统可以同时有84个processes,对任何人应该都是足 够的。当你执行程序时,得到像是“proctablefull”这样的错误信息,或者你要建一个 同时会有很多人来访问的网站(如WalnutCreekCDROM的FTP)时,你就要增加这个设置的 值,然后重新编译内核。 注意:maxuser这个参数并不限制可以登陆你系统的用户的数目。它只是系统中使用者 可以最多执行的程序的个数。有一个关键词的值则真的限制了可以同时远程连接(remote logins)的人数:pseudo-devicepty16。 #Floatingpointsupport-donotdisable. devicenpx0atnexus?portIO_NPXirq13 npx0是连接FreeBSD中浮点运算处理器的一个接口。不论你有硬件的浮点运算处理器 还是使用软件仿真,都需要这个设置。这个设置并不是可有可无的。 #Pseudodevices-thenumberindicateshowmanyunitstoallocate. pseudo-deviceloop#Networkloopback loop是一个通用的TCP/IP接口。如果你用telnet或ftp连到localhost(等同于 127.0.0.1),则该连接会通过这个虚拟设备连回来。这是一定要有的设置,请不要去掉。 #makeoptionsDEBUG=-g#Buildkernelwithgdb(1)debugsymbols optionsMATH_EMULATE#Supportforx87emulation 如果你的计算机没有浮点运算处理器(386或486SX),你可以加入这行,使得内核提供 软件仿真的浮点运算处理器。如果你用的是486DX或是386SX、486SX(还加装了387、487 芯片)或更高的(Pentium、PentiumII等)则不需要这行设置。 注意:这个仿真的浮点运算处理器并不是很精确。如果你没有浮点运算器,还需要较 高的精度,你可以改用GPL_MATH_EMULATE参数,这将会使用GNU的浮点运算仿真器。至于 为什么这个仿真器不是系统默认值,是因为GNU使用许可的关系。 optionsINET#InterNETworking 提供网络支持。就算你不打算连上网络,你还是要留着这个选项。对于绝大部分的程序, 这个选项是一定要有的。 第6页FreeBSD使用手册 optionsINET6#IPv6communicationsprotocols 这个启用IPv6通讯协议。 optionsFFS#BerkeleyFastFilesystem optionsFFS_ROOT#FFSusableasrootdevice[keepthis!] 最基本的硬盘文件系统。如果你要从硬盘启动,就留着。 optionsMFS#MemoryFilesystem optionsMD_ROOT#MDisapotentialrootdevice Memory-mapped文件系统。提供RAMdisk,以供需要快速访问的资料或是暂存资料用。 如果你分了很大的swap空间,使用这个选项可以给你不少好处。把/tmp挂到MFS分区是一 个相当好的想法,因为不少程序都会在此暂存资料。要把/tmp挂到MFSRAMdisk,可以修 改/etc/fstab,加入以下一行: /dev/ad1s2b/tmpmfsrw00 现在重启动,或是键入mount/tmp命令: optionsNFS#NetworkFilesystem optionsNFS_ROOT#NFSusableasrootdevice,NFSrequired 网络文件系统(NetworkFilesystem,NFS),除非你要从网络上的其它机器加载目录, 不然你可以用#号注释掉这行设置。 optionsMSDOSFS#MSDOSFilesystem MS-DOS文件系统。除非你要在启动时挂上一个DOS格式的硬盘,不然你可以放心地把 这行注释掉。如前所述,在你第一次挂上一个DOS分区时,内核将会自动加载模块来支持它。 此外,mtools是个相当不错的软件(可在ports里面找到),可以让你在访问DOS磁盘时, 不需要挂入或卸载软盘(而且也不需要MSDOSFS的支持)。 optionsCD9660#ISO9660Filesystem optionsCD9660_ROOT#CD-ROMusableasroot,CD9660required CD-ROM使用的ISO9660文件系统。如果你没有光驱,或是很少用光驱,可以注释掉这 一行(内核会在第一次挂入时动态加载模块以支持它)。音乐CD则不会用到这个文件系统。 optionsPROCFS#Processfilesystem 第7页FreeBSD使用手册 Processfilesystem。这是一个虚拟的文件系统,挂在/proc下,允许一些程序,像ps 来读取资料,提供你正在执行的processes的信息。 optionsCOMPAT_43#CompatiblewithBSD4.3[KEEPTHIS!] 使系统兼容4.3BSD。不要去掉这一行,不然有些程序将无法正常运行。 optionsSCSI_DELAY=15000#Delay(inms)beforeprobingSCSI 这行设置告诉内核等待15秒钟,以供SCSI控制器扫描你计算机上的SCSI设备。如果 你只有IDE硬盘,你可以不理会这个设置,不然你可能会想要降低这个值,也许会降到五秒, 以增加启动的速度。如果你发现降低后,FreeBSD无法正确辨认你的SCSI设备,那么你该 提高这个值,延长等待时间。 optionsUCONSOLE#Allowuserstograbtheconsole 允许使用者找到console信息,对XWindow很有用。举例来说,你可以输入xterm-C 来打开一个consolexterm,这个窗口将显示任何write、talk等命令的信息,以及你发出 去的信息。当然,kernel产生的信息也会在这里出现。 optionsUSERCONFIG#boot-ceditor 这个选项允许你从启动菜单启动配置编辑器。 optionsVISUAL_USERCONFIG#visualboot-ceditor 这个选项允许你从启动菜单启动虚拟配置编辑器。 optionsKTRACE#ktracesupport 这个选项启用内核进程跟踪,在调试时很有用。 optionsSYSVSHM#SYSV-stylesharedmemory 提供SystemVSharedmemory(SHM)的支持,最常用到SHM的应该是XWindow的XSHM 延伸,不少绘图相关程序(像影片播放程序XAnim与LinuxDOOM游戏)会自动使用SHM来提 供额外的速度。如果你要使用XWindow,你最好加入这个选项。 optionsSYSVSEM#SYSV-stylesemaphores 支持SystemVsemaphores,不常用到,只在kernel中占用几百个字节的空间。 optionsSYSVMSG#SYSV-stylemessagequeues 支持SystemVmessages,一样的,只占用kernel几百字节的空间。 第8页FreeBSD使用手册 注意:ipcs命令可以显示出任何使用到上述三个SystemV功能的processes。 optionsP1003_1B#PosixP1003_1Breal-timeextensions options_KPOSIX_PRIORITY_SCHEDULING 在1993POSIX中添加的实时扩展。在portscollection中某些应用程序会用到这些(如 StarOffice)。 optionsICMP_BANDLIM#Ratelimitbadreplies 这个选项启用ICMP的带宽限制的错误响应。你使用这个选项可以帮助你保护你的机器 免受拒绝式服务攻击。 #TomakeanSMPkernel,thenexttwoareneeded #optionsSMP#SymmetricMultiProcessorKernel #optionsAPIC_IO#Symmetric(APIC)I/O 上面两个选项都支持SMP。 deviceisa 所有FreeBSD支持的PC都需要这行设置。如果你使用IBMPS/2(微信道架构)计算机, 则你无法在该机器上执行FreeBSD。 deviceeisa 如果你的主机板上有EISA总线,加入这个设置。使用这个选项可以自动扫描并设置所 有连接在EISA总线上的设备。 devicepci 如果你的主板有PCI总线,就加入这个选项。使用这个选项可以自动扫描PCI卡,并在 PCI到ISA之间建立通路。 #Floppydrives devicefdc0atisa?portIO_FD1irq6drq2 devicefd0atfdc0drive0 devicefd1atfdc0drive1 软盘控制器:fd0是A:盘,fd1是B:盘。ft0则是连接到软盘的QIC-80磁带机。如 果你没有上述设备,就注释掉这几行设置。 deviceata 第9页FreeBSD使用手册 这个驱动器支持所有ATA和ATAPI设备。你只要在内核中加入ata选项,就可以让内核 支持现代计算机上的所有PCIATA/ATAPI设备。 deviceatadisk#ATAdiskdrives 这个是ATAPI磁盘驱动器所必须的。 deviceatapicd#ATAPICDROMdrives 这个是ATAPICDROM驱动器所必须的。 deviceatapifd#ATAPIfloppydrives 这个是ATAPI软盘驱动器所必须的。 deviceatapist#ATAPItapedrives 这个是ATAPI磁带机驱动器所必须的。 optionsATA_STATIC_ID#Staticdevicenumbering 这个可以静态分配控制器的编号,也可以动态分配设备的编号。 #ATAandATAPIdevices deviceata0atisa?portIO_WD1irq14 deviceata1atisa?portIO_WD2irq15 上面的选项用在比较老的,非PCI的系统中。 #SCSIControllers deviceahb#EISAAHA1742family deviceahc#AHA2940andonboardAIC7xxxdevices deviceamd#AMD53C974(TeckramDC-390(T)) devicedpt#DPTSmartcache-SeeLINTforoptions! deviceisp#Qlogicfamily devicencr#NCR/SymbiosLogic devicesym#NCR/SymbiosLogic(newerchipsets) deviceadv0atisa? deviceadw devicebt0atisa? deviceaha0atisa? 第10页FreeBSD使用手册 deviceaic0atisa? SCSI控制器。可以注释掉你系统中没有的设备。如果你只有IDE设备,你可以把这些 一起删掉。 #SCSIperipherals devicescbus#SCSIbus(required) deviceda#DirectAccess(disks) devicesa#SequentialAccess(tapeetc) devicecd#CD devicepass#Passthroughdevice(directSCSI access) SCSI外围设备。也可以象上面一样操作。 #RAIDcontrollers deviceida#CompaqSmartRAID deviceamr#AMIMegaRAID devicemlx#MylexDAC960family 支持RAID控制器。如果你没有这些,可以把它们注释掉或是删掉。 #atkbdc0controlsboththekeyboardandthePS/2mouse deviceatkbdc0atisa?portIO_KBD 键盘控制器atkbdc提供AT键盘输入以及PS/2指针设备的I/O服务。键盘驱动程序 atkbd与PS/2鼠标驱动程序psm需要这个控制器,所以不要删除它。 deviceatkbd0atatkbdc?irq1 atkbd驱动程序,与atkbdc控制器一起作用,提供连接到AT键盘控制器的AT84键盘 与AT加强型键盘的访问服务。 devicepsm0atatkbdc?irq12 如果你的鼠标连接到PS/2鼠标端口,就使用这个设备驱动程序。 devicevga0atisa? 显卡驱动。 #splashscreen/screensaver 第11页FreeBSD使用手册 pseudo-devicesplash 在启动时的启动画面!屏幕保护也需要这个。 #sysconsisthedefaultconsoledriver,resemblinganSCOconsole devicesc0atisa? sc0是默认的console驱动程序,绝大部分全屏幕程序都通过termcap这类terminal databaselibrary来访问console,因此不论你用这个驱动程序或是VT220兼容console 驱动程序vt0,这中间并没有太大差别。如果使用sc0,且你在登陆系统后,执行全屏幕程 序时遇到问题,请将你的TERM设置成“scoansi”。 #EnablethisandPCVT_FREEBSDforpcvtvt220compatibleconsoledriver #devicevt0atisa? #optionsXSERVER#supportforXserveronavtconsole #optionsFAT_CURSOR#startwithblockcursor #IfyouhaveaThinkPAD,uncommentthisalongwiththerestofthePCVTlines #optionsPCVT_SCANSET=2#IBMkeyboardsarenon-std 这是一个兼容VT220的console驱动程序,并向下兼容VT100/102。在部分与sc0相冲 突的笔记本计算机上,这个驱动程序运作良好。当然,当你登陆系统时,记得设置TERM参 数为vt100或是vt220。当连接到网络上许多计算机时,这个驱动程序也常是很有用的,这 是因为许多的计算机上的termcap或是terminfo并没有sc0的资料—而vt100的资料几乎 所有的平台上都支持。 #Powermanagementsupport(seeLINTformoreoptions) deviceapm0atnexus?disableflags0x20#AdvancedPower Management 高级电源管理支持。使用在膝上型电脑上。 #PCCARD(PCMCIA)support devicecard devicepcic0atisa?irq10port0x3e0iomem0xd0000 devicepcic1atisa?irq11port0x3e2iomem0xd4000disable PCMCIA支持。如果你使用膝上型电脑,你需要这个。 第12页FreeBSD使用手册 #Serial(COM)ports devicesio0atisa?portIO_COM1flags0x10irq4 devicesio1atisa?portIO_COM2irq3 devicesio2atisa?disableportIO_COM3irq5 devicesio3atisa?disableportIO_COM4irq9 sio0到sio3可看作是MS-DOS系统中的COM1到COM4。如果你使用内置式的数据机,且 占用COM4,而你的系统又有COM2,则你必须修改调制解调器的IRQ为2(IRQ2跟IRQ9是 一样的),这样你才能正常使用调制解调器。部分显示卡(特别是使用S3芯片的卡),用到 0x*2e8这个I/O地址,而一些便宜的串行卡,没办法正确译码16位的I/O寻址空间,因此 两张卡会冲突,导致COM4无法正常使用。每个串行口都要有一个唯一的IRQ,所以COM3与 COM4默认的IRQ将无法使用。 #Parallelport deviceppc0atisa?irq7 ISA-bus并行接口 deviceppbus#Parallelportbus(required) 提供并行总线的支持。 devicelpt#Printer 提供并口打印机的支持。 注意:要使用并口打印机,就必须同时加入上面三行设置。 deviceplip#TCP/IPoverparallel 这是针对并行网络接口的驱动器。 deviceppi#Parallelportinterfacedevice 普通用途的I/O(“geekport”) IEEE1284I/O。 #devicevpo#Requiresscbusandda 这是针对IomegaZip驱动器的。它要求scbus和da的支持。最好的执行效果是工作在 EPP1.9模式。 #PCIEthernetNICs. 第13页FreeBSD使用手册 devicede#DEC/IntelDC21x4x(``Tulip'') devicefxp#IntelEtherExpressPRO/100B(82557,82558) devicetx#SMC9432TX(83c170``EPIC'') devicevx#3Com3c590,3c595(``Vortex'') devicewx#IntelGigabitEthernetCard(``Wiseman'') 多种PCI网卡驱动器。注释或删除在你系统中没有的设备。 #PCIEthernetNICsthatusethecommonMIIbuscontrollercode. devicemiibus#MIIbussupport MII总线支持对于一些PCI10/100EthernetNICs来说是必需的。 devicedc#DEC/Intel21143andvariousworkalikes devicerl#RealTek8129/8139 devicesf#AdaptecAIC-6915(``Starfire'') devicesis#SiliconIntegratedSystemsSiS900/SiS7016 deviceste#SundanceST201(D-LinkDFE-550TX) devicetl#TexasInstrumentsThunderLAN devicevr#VIARhine,RhineII devicewb#WinbondW89C840F devicexl#3Com3c90x(``Boomerang'',``Cyclone'') 使用MII总线控制器代码的驱动器。 #ISAEthernetNICs. deviceed0atisa?port0x280irq10iomem0xd8000 deviceex deviceep #WaveLAN/IEEE802.11wirelessNICs.Note:theWaveLAN/IEEEreally #existsonlyasaPCMCIAdevice,sothereisnoISAattachmentneeded #andresourceswillalwaysbedynamicallyassignedbythepccardcode. devicewi #Aironet4500/4800802.11wirelessNICs.Note:thedeclarationbelowwill 第14页FreeBSD使用手册 #workforPCMCIAandPCIcards,aswellasISAcardssettoISAPnP #mode(thefactorydefault).IfyousettheswitchesonyourISA #cardforamanuallychosenI/OaddressandIRQ,youmustspecify #thoseparametershere. devicean #Theprobeorderoftheseispresentlydeterminedbyi386/isa/isa_compat.c. deviceie0atisa?port0x300irq10iomem0xd0000 devicefe0atisa?port0x300 devicele0atisa?port0x300irq5iomem0xd0000 devicelnc0atisa?port0x280irq10drq0 devicecs0atisa?port0x300 devicesn0atisa?port0x300irq10 #requiresPCCARD(PCMCIA)supporttobeactivated #devicexe0atisa? ISA以太网驱动器。看看/usr/src/sys/i386/conf/LINT了解一下哪个卡被哪个驱动器 支持。 pseudo-deviceether#Ethernetsupport 如果你有一个以太网卡,ether是必需的。它包含了通用的以太网协议代码。 pseudo-devicesl1#KernelSLIP Sl是针对SLIP支持的。这已经完全被PPP所代替,它是早期使用的协议。 pseudo-deviceppp1#KernelPPP ppp提供内核模式(kernel-mode)的PPP拨号支持。另外有一个tun则是用户模式 (user-mode)的PPP支持,tun较有弹性且功能较多。如果你要使用这个PPP驱动程序,请 参考内核模式PPP这一章节。如同sl,number设置系统最多同时能支持几个PPP连接。 pseudo-devicetun#Packettunnel. tun是使用者模式的PPP软件。这个程序设置相当方便,且速度很快。它有一些特殊的 功能,像是在需要连接时自动拨号(dial-on-demand)。tun后面接的数字设置系统同时能支 持几个PPP连接。参看使用者模式PPP以获得更多信息。 第15页FreeBSD使用手册 pseudo-devicepty#Pseudo-ttys(telnetetc) pty是虚拟的终端机,或仿真的loginport。Ctelnet或rlogin连接、xterm以及其它 应用程序如emacs会用到pty。number设置系统的pty个数。系统默认值是16,如果你要 提高同时连接数,可以适当增加这个数值,最高可达256个。 pseudo-devicemd#Memory“disks” Memorydiskpseudo-devices. pseudo-devicegif4#IPv6andIPv4tunneling 这个执行IPv6与IPv4,IPv4与IPv6,IPv4与IPv4,IPv6与IPv6之间的转换. pseudo-devicefaith1#IPv6-to-IPv4relaying(translation) 这个伪设备能检测到接收到的数据包,然后把它们发送给IPv4/IPv6翻译程序。 #The`bpf'pseudo-deviceenablestheBerkeleyPacketFilter. #Beawareoftheadministrativeconsequencesofenablingthis! pseudo-devicebpf#Berkeleypacketfilter 这是Berkeley的封包过滤器。这个伪设备允许网络接口被放在复杂的模式上,在网络 上捕获每个封包。这些封包能被磁盘捕获或被tcpdump程序检查。 注意:bpfpseudo-device也可以被dhclient用来获得默认路由的IP地址。如果你使 用DHCP,不要注释掉这行。 #USBsupport #deviceuhci#UHCIPCI->USBinterface #deviceohci#OHCIPCI->USBinterface #deviceusb#USBBus(required) #deviceugen#Generic #deviceuhid#``HumanInterfaceDevices'' #deviceukbd#Keyboard #deviceulpt#Printer #deviceumass#Disks/Massstorage-Requiresscbusandda #deviceums#Mouse 第16页FreeBSD使用手册 #USBEthernet,requiresmii #deviceaue#ADMtekUSBethernet #devicecue#CATCUSBethernet #devicekue#KawasakiLSIUSBethernet 支持多种USB设备。更多有关FreeBSD支持的设备请参考 /usr/src/sys/i386/conf/LINT。 9.5建立设备的节点 几乎内核中的每个设备在/dev目录下都有对应的节点。这些节点看上去是些规则文件, 但事实上是程序在使用对应的设备时,与内核联系的进入点。当你一开始安装操作系统时, 那些可执行的外壳脚本/dev/MAKEDEV就创建了几乎所有支持的设备。然而,它并不是建立 所有设备,所以当你加入对新设备的支持时,注意确信对应的节点在这个目录下。如果不是, 就加入它们。这儿是一个简单的例子: 确信在内核中加入了IDECD-ROM的支持。可以这样加入:deviceacd0 这意味着你应当在/dev目录下找一些以acd0为起点的入口,通常后面有一个字母,象 c或以r开头表示这是一个raw设备。那些文件不在那儿,必须改变/dev目录然后键入: #shMAKEDEVacd0 当这些脚本完成后,你要找一下在/dev目录下有acd0c和racd0c等几个入口,表示程 序已经正确执行。 以下是加入声卡节点的例子: #shMAKEDEVsnd0 注意:当创建完诸如声卡这样的设备节点时,如果其它人有权访问你的机器,可能有 必要在/etc/fbtab文件中添加这些节点来保护系统安全。可看一下fstab的联机手册以了 解更多信息。 依上述的简单程序,建立任何不在GENERIC里的硬件设备节点。 注意:所有的SCSI控制器都使用一样的设备节点,所以你无须重新建立节点。另外, 网卡与SLIP/PPP虚拟设备并没有任何设备节点,所以你不必担心怎么建立节点。 9.6如果出现问题怎么办? 在定制一个内核时,可能会出现四种问题。它们是: 配置失败 第17页FreeBSD使用手册 当你在你的内核描述中看到config命令失败,你可能在某个地方发生了一个小错误。 幸运的是,config会显示出错的那一行的行号,你可以用vi编辑器做修改。例如, 如果你看到:config:line17:syntaxerror 你可以在vi中用命令模式输入17G来跳到17行。比较GENERIC内核或其它参考资料, 以确定你打对关键字。 编译错误 如果编译失败,通常会在你的内核描述中提示一个错误,但config并没有找出错误。 另外,查看一下你的配置信息,如果你仍然无法解决这个问题,可以把你的内核配置 信息发邮件到FreeBSD普通问题邮件列表,它将很快 地被解决。 内核无法启动 如果你的新内核无法启动,或无法识别你的硬件,不要担心!幸运的是,BSD有一个 解决复杂内核错误的很好机制。从FreeBSD的启动loader中,选择一个你要启动的 内核。当配置一个内核时,记得在手头保留一个能正常启动的内核是个好主意。 在用一个好的内核启动后,你可以检查一下你的配置文件,再设法重新建立一个内核。 一个有帮助的文件是/var/log/messages文件,它记载了每个成功启动的所有内核信 息。同样,dmesg命令会列出当前启动中的内核信息。 注意:你在编译内核时,确信保留着一个GENERIC或以其它名字命名的内核。你不能 仅依靠kernel.old,因为当你安装一个新内核时,kernel.old会被最后一次安装的内 核所覆盖。所以,尽快将当前正常工作的内核移到不能正常工作的内核,你可以用ps 命令查一下。解开编译安装内核文件的正确命令是: #chflagsnoschg/kernel 另外,如果你要设定内核或其它文件的访问限制,以至它不能被移动或修改,可以用 下面的命令: #chflagsschg/kernel 内核工作,但ps根本就不工作! 如果你安装了一个不同版本的内核到系统,例如,在3.x系统中安装了4.x内核,许 多系统内建的命令象ps和vmstat会根本不工作。你必须重编译libkvm库以及这些 程序。千万不要随意从其它系统拷贝不同版本的内核来使用。 第18页 | | 关键字: |
|
|