电脑技术学习

FreeBSD handbook中文版 9 配制FreeBSD 的内核

dn001
目录
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;,;选择
configure;Distributions;src;sys。
接着,切换到arch/conf;目录,拷贝GENERIC;配置文件,并给这个文件起一个容易辨认的名
称,它就是你的内核名称。例如:;
#;cd;/usr/src/sys/i386/conf;
#;cp;GENERIC;MYKERNEL;
通常,这个名称是大写的,如果正维护着多台不同硬件的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/config;MYKERNEL;
#;cd;../../compile/MYKERNEL;
#;make;depend;
#;make;
#;make;install;
如果你刚升级到一个比较新的版本,确信你已经重建了整个系统,然后运行下面的命令:;
#;cd;/usr/src;
#;make;buildkernel;KERNCONF=MYKERNEL;
#;make;installkernel;KERNCONF=MYKERNEL;
如果你还没有升级你的源代码树,那你应当按顺序执行:;
config,make;depend,make,make;install;
警告:如果你已经升级了你的源代码,你必须使用make;buildkernel;方法来定制你的
内核。否则,用旧的工具来定制内核,可能会引起错误。如果你已经升级了源代码,不要
使用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。
数字的引号限制(Quoting;numbers):;目前所有FreeBSD;版本,包括3-stable;
版,其内核设置文件中如果有任何属于文字形式的数字(如i386),必须用双引号引
起来,不然执行config;时会出错。
如果数字是表示数目、个数,如maxuser;64;这个设置,则不要加双引号。目
前FreeBSD;CURRENT;版本已经去掉上述限制,不论是哪种形式的数字都不需要加双
引号。本章的例子,在文字形式的数字前后仍加了双引号(“”),如果你使用FreeBSD;
CURRENT,请自动去除双引号。
下面是一个带有很多额外注释的GENERIC;内核配置文件的例子。这个例子与
/usr/src/sys/i386/conf/GENERIC;非常相似。有关内核配置的最详细的选项,请参
看/usr/src/sys/i386/conf/LINT。
#;
#;GENERIC;--;Generic;kernel;configuration;file;for;FreeBSD/i386;
#;
#;For;more;information;on;this;file,;please;read;the;handbook;section;on;
#;Kernel;Configuration;Files:;
#;
#;http://www.FreeBSD.org/handbook/kernelconfig-config.html;
#;
#;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;(http://www.FreeBSD.ORG/);for;the;
第4;页FreeBSD;使用手册
#;latest;information.;
#;
#;An;exhaustive;list;of;options;and;more;detailed;explanations;of;the;
#;device;lines;is;also;present;in;the;./LINT;configuration;file.;If;you;are;
#;in;doubt;as;to;the;purpose;or;necessity;of;a;line,;check;first;in;LINT.;
#;
#;$FreeBSD:;src/sys/i386/conf/GENERIC,v;1.246;2000/03/09;16:32:55;jlemon;Exp;
$;
下面这个选项在每个内核中都要有:;
machine;i386;
上面的选项指出了在你的系统中所用的CPU;类型。你可以使用多个CPU;类型(例如,你
不确信你使用的是I586_CPU;还是I686_CPU),然而,对于一个定制的内核,最好是只指定
你所拥有的CPU;类型。如果你不能确定你的CPU;类型,你可以使用dmesg;命令来看看你的启
动信息。
Alpha;结构的机器使用下面的选项:;
cpu;EV4;
cpu;EV5;
如果你正使用一台Alpha;机器,你应当使用上面的CPU;类型。
ident;GENERIC;
ident;是一个内核的标识符。你应该自己命名一个容易辨认的名称,以有别于GENERIC;
的名称─GENERIC。放在ident;后的参数,将在你用这个内核启动时显示在屏幕上。如果你
同时设置了几个内核,采用不同的名称是个不错的主意。
注意,象machine;与cpu;这两个设置。如果你的内核名称包含数字,请记得用双引号把
它括起来。内核名称将会使用-D;参数传给编译器,所以不要用像DEBUG;或是其它可能干扰
编译器的机器、CPU;名称,如vax。
maxusers;32;
这个设置的大小值定义了重要的system;tables。这个数值粗略地假设你的机器同时会
有多少使用者。然而,在一般情况下,你最少要设置4;个以上,特别是你要执行X;Window;
或是编译程序。原因是maxusers;值决定了系统同时可有多少个进程(;processes),其算法
是20;+;16;*;maxusers。如果你设置maxusers;值是1,则你的系统只能同时存在36;个
第5;页FreeBSD;使用手册
processes,包括18;个(或更多)系统启动要占去的processes;如果你执行了X;Window,则
又要用掉15;个以上。甚至阅读一个man;page;也会使用九个processes;来过滤、解压缩、然
后显示文件。设置maxusers=4,则系统可以同时有84;个processes,对任何人应该都是足
够的。当你执行程序时,得到像是“proc;table;full”这样的错误信息,或者你要建一个
同时会有很多人来访问的网站(如Walnut;Creek;CDROM;的FTP)时,你就要增加这个设置的
值,然后重新编译内核。
注意:;maxuser;这个参数并不限制可以登陆你系统的用户的数目。它只是系统中使用者
可以最多执行的程序的个数。有一个关键词的值则真的限制了可以同时远程连接(remote;
logins)的人数:pseudo-device;pty;16。
#;Floating;point;support;-;do;not;disable.;
device;npx0;at;nexus?;port;IO_NPX;irq;13;
npx0;是连接FreeBSD;中浮点运算处理器的一个接口。不论你有硬件的浮点运算处理器
还是使用软件仿真,都需要这个设置。这个设置并不是可有可无的。
#;Pseudo;devices;-;the;number;indicates;how;many;units;to;allocate.;
pseudo-device;loop;#;Network;loopback;
loop;是一个通用的TCP/IP;接口。如果你用telnet;或ftp;连到localhost(等同于
127.0.0.1),则该连接会通过这个虚拟设备连回来。这是一定要有的设置,请不要去掉。
#makeoptions;DEBUG=-g;#Build;kernel;with;gdb(1);debug;symbols;
options;MATH_EMULATE;#Support;for;x87;emulation;
如果你的计算机没有浮点运算处理器(386;或486SX),你可以加入这行,使得内核提供
软件仿真的浮点运算处理器。如果你用的是486DX;或是386SX、486SX(还加装了387、487;
芯片)或更高的(Pentium、Pentium;II;等)则不需要这行设置。
注意:;这个仿真的浮点运算处理器并不是很精确。如果你没有浮点运算器,还需要较
高的精度,你可以改用GPL_MATH_EMULATE;参数,这将会使用GNU;的浮点运算仿真器。至于
为什么这个仿真器不是系统默认值,是因为GNU;使用许可的关系。
options;INET;#InterNETworking;
提供网络支持。就算你不打算连上网络,你还是要留着这个选项。对于绝大部分的程序,;
这个选项是一定要有的。
第6;页FreeBSD;使用手册
options;INET6;#IPv6;communications;protocols;
这个启用IPv6;通讯协议。
options;FFS;#Berkeley;Fast;Filesystem;
options;FFS_ROOT;#FFS;usable;as;root;device;[keep;this!];
最基本的硬盘文件系统。如果你要从硬盘启动,就留着。
options;MFS;#Memory;Filesystem;
options;MD_ROOT;#MD;is;a;potential;root;device;
Memory-mapped;文件系统。提供RAM;disk,以供需要快速访问的资料或是暂存资料用。
如果你分了很大的swap;空间,使用这个选项可以给你不少好处。把/tmp;挂到MFS;分区是一
个相当好的想法,因为不少程序都会在此暂存资料。要把/tmp;挂到MFS;RAM;disk,可以修
改/etc/fstab,加入以下一行:;
/dev/ad1s2b;/tmp;mfs;rw;0;0;
现在重启动,或是键入mount;/tmp;命令:;
options;NFS;#Network;Filesystem;
options;NFS_ROOT;#NFS;usable;as;root;device,;NFS;required;
网络文件系统(Network;Filesystem,;NFS),除非你要从网络上的其它机器加载目录,;
不然你可以用#;号注释掉这行设置。
options;MSDOSFS;#MSDOS;Filesystem;
MS-DOS;文件系统。除非你要在启动时挂上一个DOS;格式的硬盘,不然你可以放心地把
这行注释掉。如前所述,在你第一次挂上一个DOS;分区时,内核将会自动加载模块来支持它。
此外,mtools;是个相当不错的软件(可在ports;里面找到),可以让你在访问DOS;磁盘时,;
不需要挂入或卸载软盘(而且也不需要MSDOSFS;的支持)。
options;CD9660;#ISO;9660;Filesystem;
options;CD9660_ROOT;#CD-ROM;usable;as;root,;CD9660;required;
CD-ROM;使用的ISO;9660;文件系统。如果你没有光驱,或是很少用光驱,可以注释掉这
一行(内核会在第一次挂入时动态加载模块以支持它)。音乐CD;则不会用到这个文件系统。
options;PROCFS;#Process;filesystem;
第7;页FreeBSD;使用手册
Process;filesystem。这是一个虚拟的文件系统,挂在/proc;下,允许一些程序,像ps;
来读取资料,提供你正在执行的processes;的信息。
options;COMPAT_43;#Compatible;with;BSD;4.3;[KEEP;THIS!];
使系统兼容4.3BSD。不要去掉这一行,不然有些程序将无法正常运行。
options;SCSI_DELAY=15000;#Delay;(in;ms);before;probing;SCSI;
这行设置告诉内核等待15;秒钟,以供SCSI;控制器扫描你计算机上的SCSI;设备。如果
你只有IDE;硬盘,你可以不理会这个设置,不然你可能会想要降低这个值,也许会降到五秒,;
以增加启动的速度。如果你发现降低后,FreeBSD;无法正确辨认你的SCSI;设备,那么你该
提高这个值,延长等待时间。
options;UCONSOLE;#Allow;users;to;grab;the;console;
允许使用者找到console;信息,对X;Window;很有用。举例来说,你可以输入xterm;-C;
来打开一个console;xterm,这个窗口将显示任何write、talk;等命令的信息,以及你发出
去的信息。当然,kernel;产生的信息也会在这里出现。
options;USERCONFIG;#boot;-c;editor;
这个选项允许你从启动菜单启动配置编辑器。
options;VISUAL_USERCONFIG;#visual;boot;-c;editor;
这个选项允许你从启动菜单启动虚拟配置编辑器。
options;KTRACE;#ktrace;support;
这个选项启用内核进程跟踪,在调试时很有用。
options;SYSVSHM;#SYSV-style;shared;memory;
提供System;V;Shared;memory(SHM)的支持,最常用到SHM;的应该是X;Window;的XSHM;
延伸,不少绘图相关程序(像影片播放程序XAnim;与Linux;DOOM;游戏)会自动使用SHM;来提
供额外的速度。如果你要使用X;Window,你最好加入这个选项。
options;SYSVSEM;#SYSV-style;semaphores;
支持System;V;semaphores,不常用到,只在kernel;中占用几百个字节的空间。
options;SYSVMSG;#SYSV-style;message;queues;
支持System;V;messages,一样的,只占用kernel;几百字节的空间。
第8;页FreeBSD;使用手册
注意:;ipcs;命令可以显示出任何使用到上述三个System;V;功能的processes。
options;P1003_1B;#Posix;P1003_1B;real-time;extensions;
options;_KPOSIX_PRIORITY_SCHEDULING;
在1993;POSIX;中添加的实时扩展。在ports;collection;中某些应用程序会用到这些(如
Star;Office)。
options;ICMP_BANDLIM;#Rate;limit;bad;replies;
这个选项启用ICMP;的带宽限制的错误响应。你使用这个选项可以帮助你保护你的机器
免受拒绝式服务攻击。
#;To;make;an;SMP;kernel,;the;next;two;are;needed;
#options;SMP;#;Symmetric;MultiProcessor;Kernel;
#options;APIC_IO;#;Symmetric;(APIC);I/O;
上面两个选项都支持SMP。
device;isa;
所有FreeBSD;支持的PC;都需要这行设置。如果你使用IBM;PS/2;(微信道架构)计算机,;
则你无法在该机器上执行FreeBSD。
device;eisa;
如果你的主机板上有EISA;总线,加入这个设置。使用这个选项可以自动扫描并设置所
有连接在EISA;总线上的设备。
device;pci;
如果你的主板有PCI;总线,就加入这个选项。使用这个选项可以自动扫描PCI;卡,并在
PCI;到ISA;之间建立通路。
#;Floppy;drives;
device;fdc0;at;isa?;port;IO_FD1;irq;6;drq;2;
device;fd0;at;fdc0;drive;0;
device;fd1;at;fdc0;drive;1;
软盘控制器:fd0;是A:;盘,fd1;是B:;盘。ft0;则是连接到软盘的QIC-80;磁带机。如
果你没有上述设备,就注释掉这几行设置。
device;ata;
第9;页FreeBSD;使用手册
这个驱动器支持所有ATA;和ATAPI;设备。你只要在内核中加入ata;选项,就可以让内核
支持现代计算机上的所有PCI;ATA/ATAPI;设备。
device;atadisk;#;ATA;disk;drives;
这个是ATAPI;磁盘驱动器所必须的。
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;
这个可以静态分配控制器的编号,也可以动态分配设备的编号。
#;ATA;and;ATAPI;devices;
device;ata0;at;isa?;port;IO_WD1;irq;14;
device;ata1;at;isa?;port;IO_WD2;irq;15;
上面的选项用在比较老的,非PCI;的系统中。
#;SCSI;Controllers;
device;ahb;#;EISA;AHA1742;family;
device;ahc;#;AHA2940;and;onboard;AIC7xxx;devices;
device;amd;#;AMD;53C974;(Teckram;DC-390(T));
device;dpt;#;DPT;Smartcache;-;See;LINT;for;options!;
device;isp;#;Qlogic;family;
device;ncr;#;NCR/Symbios;Logic;
device;sym;#;NCR/Symbios;Logic;(newer;chipsets);
device;adv0;at;isa?;
device;adw;
device;bt0;at;isa?;
device;aha0;at;isa?;
第10;页FreeBSD;使用手册
device;aic0;at;isa?;
SCSI;控制器。可以注释掉你系统中没有的设备。如果你只有IDE;设备,你可以把这些
一起删掉。
#;SCSI;peripherals;
device;scbus;#;SCSI;bus;(required);
device;da;#;Direct;Access;(disks);
device;sa;#;Sequential;Access;(tape;etc);
device;cd;#;CD;
device;pass;#;Passthrough;device;(direct;SCSI;
access);
SCSI;外围设备。也可以象上面一样操作。
#;RAID;controllers;
device;ida;#;Compaq;Smart;RAID;
device;amr;#;AMI;MegaRAID;
device;mlx;#;Mylex;DAC960;family;
支持RAID;控制器。如果你没有这些,可以把它们注释掉或是删掉。
#;atkbdc0;controls;both;the;keyboard;and;the;PS/2;mouse;
device;atkbdc0;at;isa?;port;IO_KBD;
键盘控制器atkbdc;提供AT;键盘输入以及PS/2;指针设备的I/O;服务。键盘驱动程序
atkbd;与PS/2;鼠标驱动程序psm;需要这个控制器,所以不要删除它。
device;atkbd0;at;atkbdc?;irq;1;
atkbd;驱动程序,与atkbdc;控制器一起作用,提供连接到AT;键盘控制器的AT;84;键盘
与AT;加强型键盘的访问服务。
device;psm0;at;atkbdc?;irq;12;
如果你的鼠标连接到PS/2;鼠标端口,就使用这个设备驱动程序。
device;vga0;at;isa?;
显卡驱动。
#;splash;screen/screen;saver;
第11;页FreeBSD;使用手册
pseudo-device;splash;
在启动时的启动画面!屏幕保护也需要这个。
#;syscons;is;the;default;console;driver,;resembling;an;SCO;console;
device;sc0;at;isa?;
sc0;是默认的console;驱动程序,绝大部分全屏幕程序都通过termcap;这类terminal;
database;library;来访问console,因此不论你用这个驱动程序或是VT220;兼容console;
驱动程序vt0,这中间并没有太大差别。如果使用sc0,且你在登陆系统后,执行全屏幕程
序时遇到问题,请将你的TERM;设置成“scoansi”。
#;Enable;this;and;PCVT_FREEBSD;for;pcvt;vt220;compatible;console;driver;
#device;vt0;at;isa?;
#options;XSERVER;#;support;for;X;server;on;a;vt;console;
#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;
这是一个兼容VT220;的console;驱动程序,并向下兼容VT100/102。在部分与sc0;相冲
突的笔记本计算机上,这个驱动程序运作良好。当然,当你登陆系统时,记得设置TERM;参
数为vt100;或是vt220。当连接到网络上许多计算机时,这个驱动程序也常是很有用的,这
是因为许多的计算机上的termcap;或是terminfo;并没有sc0;的资料—而vt100;的资料几乎
所有的平台上都支持。
#;Power;management;support;(see;LINT;for;more;options);
device;apm0;at;nexus?;disable;flags;0x20;#;Advanced;Power;
Management;
高级电源管理支持。使用在膝上型电脑上。
#;PCCARD;(PCMCIA);support;
device;card;
device;pcic0;at;isa?;irq;10;port;0x3e0;iomem;0xd0000;
device;pcic1;at;isa?;irq;11;port;0x3e2;iomem;0xd4000;disable;
PCMCIA;支持。如果你使用膝上型电脑,你需要这个。
第12;页FreeBSD;使用手册
#;Serial;(COM);ports;
device;sio0;at;isa?;port;IO_COM1;flags;0x10;irq;4;
device;sio1;at;isa?;port;IO_COM2;irq;3;
device;sio2;at;isa?;disable;port;IO_COM3;irq;5;
device;sio3;at;isa?;disable;port;IO_COM4;irq;9;
sio0;到sio3;可看作是MS-DOS;系统中的COM1;到COM4。如果你使用内置式的数据机,且
占用COM4,而你的系统又有COM2,则你必须修改调制解调器的IRQ;为2(IRQ;2;跟IRQ;9;是
一样的),这样你才能正常使用调制解调器。部分显示卡(特别是使用S3;芯片的卡),用到
0x*2e8;这个I/O;地址,而一些便宜的串行卡,没办法正确译码16;位的I/O;寻址空间,因此
两张卡会冲突,导致COM4;无法正常使用。每个串行口都要有一个唯一的IRQ,所以COM3;与
COM4;默认的IRQ;将无法使用。
#;Parallel;port;
device;ppc0;at;isa?;irq;7;
ISA-bus;并行接口
device;ppbus;#;Parallel;port;bus;(required);
提供并行总线的支持。
device;lpt;#;Printer;
提供并口打印机的支持。
注意:;要使用并口打印机,就必须同时加入上面三行设置。
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;驱动器的。它要求scbus;和da;的支持。最好的执行效果是工作在
EPP;1.9;模式。
#;PCI;Ethernet;NICs.;
第13;页FreeBSD;使用手册
device;de;#;DEC/Intel;DC21x4x;(``Tulip'');
device;fxp;#;Intel;EtherExpress;PRO/100B;(82557,;82558);
device;tx;#;SMC;9432TX;(83c170;``EPIC'');
device;vx;#;3Com;3c590,;3c595;(``Vortex'');
device;wx;#;Intel;Gigabit;Ethernet;Card;(``Wiseman'');
多种PCI;网卡驱动器。注释或删除在你系统中没有的设备。
#;PCI;Ethernet;NICs;that;use;the;common;MII;bus;controller;code.;
device;miibus;#;MII;bus;support;
MII;总线支持对于一些PCI;10/100;Ethernet;NICs;来说是必需的。
device;dc;#;DEC/Intel;21143;and;various;workalikes;
device;rl;#;RealTek;8129/8139;
device;sf;#;Adaptec;AIC-6915;(``Starfire'');
device;sis;#;Silicon;Integrated;Systems;SiS;900/SiS;7016;
device;ste;#;Sundance;ST201;(D-Link;DFE-550TX);
device;tl;#;Texas;Instruments;ThunderLAN;
device;vr;#;VIA;Rhine,;Rhine;II;
device;wb;#;Winbond;W89C840F;
device;xl;#;3Com;3c90x;(``Boomerang'',;``Cyclone'');
使用MII;总线控制器代码的驱动器。
#;ISA;Ethernet;NICs.;
device;ed0;at;isa?;port;0x280;irq;10;iomem;0xd8000;
device;ex;
device;ep;
#;WaveLAN/IEEE;802.11;wireless;NICs.;Note:;the;WaveLAN/IEEE;really;
#;exists;only;as;a;PCMCIA;device,;so;there;is;no;ISA;attachment;needed;
#;and;resources;will;always;be;dynamically;assigned;by;the;pccard;code.;
device;wi;
#;Aironet;4500/4800;802.11;wireless;NICs.;Note:;the;declaration;below;will;
第14;页FreeBSD;使用手册
#;work;for;PCMCIA;and;PCI;cards,;as;well;as;ISA;cards;set;to;ISA;PnP;
#;mode;(the;factory;default).;If;you;set;the;switches;on;your;ISA;
#;card;for;a;manually;chosen;I/O;address;and;IRQ,;you;must;specify;
#;those;parameters;here.;
device;an;
#;The;probe;order;of;these;is;presently;determined;by;i386/isa/isa_compat.c.;
device;ie0;at;isa?;port;0x300;irq;10;iomem;0xd0000;
device;fe0;at;isa?;port;0x300;
device;le0;at;isa?;port;0x300;irq;5;iomem;0xd0000;
device;lnc0;at;isa?;port;0x280;irq;10;drq;0;
device;cs0;at;isa?;port;0x300;
device;sn0;at;isa?;port;0x300;irq;10;
#;requires;PCCARD;(PCMCIA);support;to;be;activated;
#device;xe0;at;isa?;
ISA;以太网驱动器。看看/usr/src/sys/i386/conf/LINT;了解一下哪个卡被哪个驱动器
支持。
pseudo-device;ether;#;Ethernet;support;
如果你有一个以太网卡,ether;是必需的。它包含了通用的以太网协议代码。
pseudo-device;sl;1;#;Kernel;SLIP;
Sl;是针对SLIP;支持的。这已经完全被PPP;所代替,它是早期使用的协议。
pseudo-device;ppp;1;#;Kernel;PPP;
ppp;提供内核模式(kernel-mode)的PPP;拨号支持。另外有一个tun;则是用户模式
(user-mode)的PPP;支持,tun;较有弹性且功能较多。如果你要使用这个PPP;驱动程序,请
参考内核模式PPP;这一章节。如同sl,number;设置系统最多同时能支持几个PPP;连接。
pseudo-device;tun;#;Packet;tunnel.;
tun;是使用者模式的PPP;软件。这个程序设置相当方便,且速度很快。它有一些特殊的
功能,像是在需要连接时自动拨号(dial-on-demand)。tun;后面接的数字设置系统同时能支
持几个PPP;连接。参看使用者模式PPP;以获得更多信息。
第15;页FreeBSD;使用手册
pseudo-device;pty;#;Pseudo-ttys;(telnet;etc);
pty;是虚拟的终端机,或仿真的login;port。Ctelnet;或rlogin;连接、xterm;以及其它
应用程序如emacs;会用到pty。number;设置系统的pty;个数。系统默认值是16,如果你要
提高同时连接数,可以适当增加这个数值,最高可达256;个。
pseudo-device;md;#;Memory;“disks”;
Memory;disk;pseudo-devices.;
pseudo-device;gif;4;#;IPv6;and;IPv4;tunneling;
这个执行IPv6;与IPv4,IPv4;与IPv6,;IPv4;与IPv4,;IPv6;与IPv6;之间的转换.;
pseudo-device;faith;1;#;IPv6-to-IPv4;relaying;(translation);
这个伪设备能检测到接收到的数据包,然后把它们发送给IPv4/IPv6;翻译程序。
#;The;`bpf';pseudo-device;enables;the;Berkeley;Packet;Filter.;
#;Be;aware;of;the;administrative;consequences;of;enabling;this!;
pseudo-device;bpf;#;Berkeley;packet;filter;
这是Berkeley;的封包过滤器。这个伪设备允许网络接口被放在复杂的模式上,在网络
上捕获每个封包。这些封包能被磁盘捕获或被tcpdump;程序检查。
注意:bpf;pseudo-device;也可以被dhclient;用来获得默认路由的IP;地址。如果你使
用DHCP,不要注释掉这行。
#;USB;support;
#device;uhci;#;UHCI;PCI->USB;interface;
#device;ohci;#;OHCI;PCI->USB;interface;
#device;usb;#;USB;Bus;(required);
#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;
第16;页FreeBSD;使用手册
#;USB;Ethernet,;requires;mii;
#device;aue;#;ADMtek;USB;ethernet;
#device;cue;#;CATC;USB;ethernet;
#device;kue;#;Kawasaki;LSI;USB;ethernet;
支持多种USB;设备。更多有关FreeBSD;支持的设备请参考
/usr/src/sys/i386/conf/LINT。
9.5;建立设备的节点
几乎内核中的每个设备在/dev;目录下都有对应的节点。这些节点看上去是些规则文件,;
但事实上是程序在使用对应的设备时,与内核联系的进入点。当你一开始安装操作系统时,;
那些可执行的外壳脚本/dev/MAKEDEV;就创建了几乎所有支持的设备。然而,它并不是建立
所有设备,所以当你加入对新设备的支持时,注意确信对应的节点在这个目录下。如果不是,;
就加入它们。这儿是一个简单的例子:;
确信在内核中加入了IDE;CD-ROM;的支持。可以这样加入:device;acd0;
这意味着你应当在/dev;目录下找一些以acd0;为起点的入口,通常后面有一个字母,象
c;或以r;开头表示这是一个raw;设备。那些文件不在那儿,必须改变/dev;目录然后键入:;
#;sh;MAKEDEV;acd0;
当这些脚本完成后,你要找一下在/dev;目录下有acd0c;和racd0c;等几个入口,表示程
序已经正确执行。
以下是加入声卡节点的例子:;
#;sh;MAKEDEV;snd0;
注意:当创建完诸如声卡这样的设备节点时,如果其它人有权访问你的机器,可能有
必要在/etc/fbtab;文件中添加这些节点来保护系统安全。可看一下fstab;的联机手册以了
解更多信息。
依上述的简单程序,建立任何不在GENERIC;里的硬件设备节点。
注意:;所有的SCSI;控制器都使用一样的设备节点,所以你无须重新建立节点。另外,;
网卡与SLIP/PPP;虚拟设备并没有任何设备节点,所以你不必担心怎么建立节点。
9.6;如果出现问题怎么办?;
在定制一个内核时,可能会出现四种问题。它们是:;
配置失败
第17;页FreeBSD;使用手册
当你在你的内核描述中看到config;命令失败,你可能在某个地方发生了一个小错误。
幸运的是,config;会显示出错的那一行的行号,你可以用vi;编辑器做修改。例如,;
如果你看到:config:line;17:syntax;error;
你可以在vi;中用命令模式输入17G;来跳到17;行。比较GENERIC;内核或其它参考资料,;
以确定你打对关键字。
编译错误
如果编译失败,通常会在你的内核描述中提示一个错误,但config;并没有找出错误。
另外,查看一下你的配置信息,如果你仍然无法解决这个问题,可以把你的内核配置
信息发邮件到FreeBSD;普通问题邮件列表<freebsd-questions@FreeBSD.org>,它将很快
地被解决。
内核无法启动
如果你的新内核无法启动,或无法识别你的硬件,不要担心!幸运的是,BSD;有一个
解决复杂内核错误的很好机制。从FreeBSD;的启动loader;中,选择一个你要启动的
内核。当配置一个内核时,记得在手头保留一个能正常启动的内核是个好主意。
在用一个好的内核启动后,你可以检查一下你的配置文件,再设法重新建立一个内核。
一个有帮助的文件是/var/log/messages;文件,它记载了每个成功启动的所有内核信
息。同样,dmesg;命令会列出当前启动中的内核信息。
注意:你在编译内核时,确信保留着一个GENERIC;或以其它名字命名的内核。你不能
仅依靠kernel.old,因为当你安装一个新内核时,kernel.old;会被最后一次安装的内
核所覆盖。所以,尽快将当前正常工作的内核移到不能正常工作的内核,你可以用ps;
命令查一下。解开编译安装内核文件的正确命令是:;
#chflags;noschg;/kernel;
另外,如果你要设定内核或其它文件的访问限制,以至它不能被移动或修改,可以用
下面的命令:;
#chflags;schg;/kernel;
内核工作,但ps;根本就不工作!;
如果你安装了一个不同版本的内核到系统,例如,在3.x;系统中安装了4.x;内核,许
多系统内建的命令象ps;和vmstat;会根本不工作。你必须重编译libkvm;库以及这些
程序。千万不要随意从其它系统拷贝不同版本的内核来使用。
第18;页

标签: