电脑技术学习

自订 FreeBSD Kernel (系统核心)

dn001

Contributed;by;Jake;Hamby;.
6;October;1995.

这个略大的章节会讨论如何自订你的;FreeBSD;kernel。
这个章节适合初学者以及经验丰富的管理者。

5.1.;为何要自订;kernel;?

5.2.;建立以及安装一个自订的;kernel

5.3.;kernel;设定档

5.3.1.;一定要有的关键字
5.3.2.;一般的参数
5.3.3.;档案系统的参数
5.3.4.;基本控制卡以及介面卡
5.3.5.;SCSI;装置支援
5.3.6.;Console,滑鼠,及;X;Server;支援
5.3.7.;Serial;跟;Parallel;Ports
5.3.8.;网路
5.3.9.;音效卡
5.3.10.;虚拟装置;(Pseudo-devices)
5.3.11.;摇杆、PC;喇叭及其他杂七杂八的

5.4.;建立;device;nodes

5.5.;发生问题的解决方法


_________________________________________________________________
5.1.;为何要自订;kernel;?



建立一个自订的;kernel;是每个;UNIX;系统管理者所必须学习的重要课题。
这个过程虽然耗时,但是将会对你的;FreeBSD;系统带来许多好处。;一个自订的
kernel,只会包含支援你硬体的驱动程式,;而一个;GENERIC;kernel
却包含大多数的硬体驱动程式以便在各种机器上执行。;自订的;kernel
将包含下列优点:



*;开机时只需要花较少的时间,因为;kernel;不需花额外的时间去侦测
你没有的硬体是否存在。

*;自订的;kernel;通常占较少的记忆体,这是很重要的。;因为;kernel
本身是一个常驻在记忆体中的程式,那些没有用到的;程式码;(如;GENERIC
kernel);将会占去你其他程式执行时的记忆体空间。
因此,在一个记忆体较小的机器上,建立一个自订的;kernel
将是相当重要的。

*;最後,有你可以调整许多的;kernel;参数来符合你的需求,;以及奶J其他
(如音效卡的驱动程式);,这些是;GENERIC;kernel;所没有的。




_________________________________________________________________
5.2.;建立以及安装一个自订的;kernel



首先,我们先浏览一下编译;kernel;的目录。;所有的;kernel
原始程式都是放在;/usr/src/sys;以下的;(而通常我们会将;/sys;连结;(link)
到;/usr/src/sys)。;Kernel;原始程式有许多不同的目录,比方说
/sys/i386/conf,;你将会把你的;kernel;设定档放在此目录下;;还有例如
/sys/compile,;你将会在此编译你的;kernel。

注意:;如果你的系统中;没有;/usr/src/sys,;表示你尚未安装;kernel
原始程式,请参照系统安装过程来安装;kernel;原始程式。



接下来,进入;/sys/i386/conf;并且拷贝;GENERIC;档
成为你想要的档名。例如:

#;cd;/usr/src/sys/i386/conf
#;cp;GENERIC;MYKERNEL

传统上这个档名都是用大写字母,如果你有许多的;FreeBSD;机器,;用大写的
hostname;来命名是区分不同机器设定的好方法。

注意:;你必须以;root;的身份执行所有的命令,否则你会得到;"permission
denied";的错误。



现在,以你最习惯的编辑器编辑;MYKERNEL;(如果你不知道用什麽好,
你可以试试;vi,虽然要解释如何使用它太过杂,;但是至少大部份的;书
都会提到它。;你必须修改或新增此档案中的设定以符合你系统的需求。

如果你曾经在;SunOS;或是其他的;BSD;系统上建立过;kernel,
那麽你将会对这个;kernel;设定档的内容十分熟悉。
如果你较熟悉其他的作业系统;(如;DOS),你可能会看不懂;kernel
设定档,麻烦你仔细阅读;kernel;设定档;。

注意:;如果你是从较旧版本的;FreeBSD;升级上来的,;你可能必须一更新
config(8)。如果你是从;FreeBSD;原始程式升级的,;你可以在
/usr/src/usr.sbin/config;中找到;config;的原始程式。



当你完成建立或修改;kernel;设定档时,执行以下命令来编译你的;kernel:

#;/usr/sbin/config;MYKERNEL
#;cd;../../compile/MYKERNEL
#;make;depend
#;make
#;make;install

:make;depend;;make;;make;install;可用;make;depend;all;install;来替代

新编译好的;kernel;将会被安装到根目录去;(名为;/kernel),;旧的;kernel
将会被更名为;/kernel.old。;现在,关闭;(shutdown);你的系统并重新开机
(reboot)。;如果重新开机後出了什麽问题,请阅读本文最後的
发生问题的解决方法;。;请记得阅读;以免你的;kernel;无法开机;。

注意:;如果你增s的硬体;(如音效卡),;你必须建立一些;device;nodes
到你的;/dev;下。


_________________________________________________________________
5.3.;kernel;设定档



这个档案的内容相当的简单。每一行都包含了一个关键字以及它的参数。
任何以;#;开头的行都被视为解而忽略。;接下来会介绍;GENERIC
(一般设定档);中所含有的关键字。;另一个设定档;LINT
中包含绝大多数的详细关键字,LINT;中并有详细说明,
如果你有任何的疑问可以参考;LINT。

传统上;kernel;设定档中的关键字会以;-D;的方式由;CFLAGS
传递给编译器,但是这样做所有的档案都有可能被影响。

现在我们有了新的方法。config;这个程式会将那些关键字分门别类的放到
opt_foo.h,这样只有相关的原始程式才会参考到这些设定档。

5.3.1.;一定要有的关键字

5.3.2.;一般的参数

5.3.3.;档案系统的参数

5.3.4.;基本控制卡以及介面卡

5.3.5.;SCSI;装置支援

5.3.6.;Console,滑鼠,及;X;Server;支援

5.3.7.;Serial;跟;Parallel;Ports

5.3.8.;网路

5.3.9.;音效卡

5.3.10.;虚拟装置;(Pseudo-devices)

5.3.11.;摇杆、PC;喇叭及其他杂七杂八的


_________________________________________________________________
5.3.1.;一定要有的关键字



以下是你的;kernel;设定档中一定要有的关键字。



machine;``i386''


第一个关键字是;machine,因为;FreeBSD;现在只能在;386;以上的;PC
执行,理所当然参数是;i386。

注意:;任何包含数字的关键字都必须用引号匡起来;(如;"i386"),;否则
config;可能会误以为你的意思是数字;386;(三百八十六)。

cpu;``cpu_type''


第二个关键字是;cpu,;这些是指你的;kernel;即将支援的;CPU;种类。
它的参数;cpu_type;有:

+;I386_CPU


+;I486_CPU

+;I586_CPU


+;I686_CPU



设定档中可以有一行以上的;cpu;"cpu_type";以支援各种的;CPU,;就像
GENERIC;档案一样。如果你的硬体是固定的,只要包含你用的;CPU
种类就好了。;如果你使用;Intel;Pentium,那你只要有;cpu
"I586_CPU";就好了。

ident;machine_name


接下来是;ident,;这是用来区别不同;kernel;用的。;你可以使用
GENERIC;这个字或是其他你喜欢的字;(如;MYKERNEL)。
你可以在开机的时候看到这个字。;你可以替试验性的;kernel
取不同的名字藉以区别其它的;kernel。;要注意的是,这个字将会以
CFLAGS;的方式传给;C;编译器,;请勿使用到特殊的关键字如
DEBUG,以免发生不可预期的事。;如果你不知道要用那个字,你可以用
GENERIC;这个字。

maxusers;number


这个数字将会决定你的;kernel;中一些资料结构的大小。
例如你的系统中可以同时载入的程序;(process);数目等於;20;+;16;*
maxusers。;对於一个使用者的环境来说,设定;maxusers;=;4
大概可以符合一般需求。;然而,如果你得到;"proc;table;full"
的错误讯息,;你必须增?maxuser;的值。如果你想执行
X-Windows,你可能需要;maxuser;=;16A更大的值是必须的。

注意:;这个数字并;不是;代表你的系统
可以同时上线的人数,它只是决定你的;kernel;中一些资料结构的大小。
真正影响上线人数的是;pseudo-device;pty;16;。

config;kernel_name;root;on;root_device


这行指定;kernel;的名称及位置。传统上来说,kernel;的命名为
vmunix,;但是;FreeBSD;称它为;kernel。你一定要用;kernel;当作
kernel_name,因为许多程式都会去参考;/kernel;这个档案。
这行的第二个参数;root_device;指定你的;root;partition;跟;kernel
放在哪颗硬碟上。;一般来说,用;SCSI;硬碟的系统使用;sd0,用;IDE
硬碟的使用;wd0。


_________________________________________________________________
5.3.2.;一般的参数



这些参数提供档案系统及其它的功能支援。







options;MATH_EMULATE


这个参数让;kernel;用软体的方式模拟浮点运算,如果你的;CPU
不含浮点运算器;(或没有;387),你就必须打开此参数。

注意:;FreeBSD;所提供的一般浮点模拟器并没有十分准确,
如果你没有浮点运算器却又需要最好的准确度,你可以是用
GPL_MATH_EMULATE;来使用较优秀的;GNU;浮点模拟。;因为;GNU
版权的关,因此不以它来当作内定的模拟器。

options;``COMPAT_43''


提供;4.3BSD
的相容模式,有些程式需要这个参数,所以请一定要打开。

options;BOUNCE_BUFFERS


ISA;以及以;ISA;相容模式运作的;EISA;介面卡只能对;16MB
以下的记忆体做;DMA(Direct;Memory
Access)。这个参数用缓区的方式使得这些介面卡;可以;DMA;存取
16MB;以上的记忆体。;通常使用;ISA;SCSI;卡又有超过;16MB
的人才需要此参数,;打开此参数会使得系统稍微慢一点。

options;UCONSOLE


允许使用者?ampcirc;取;console,对;X;Windows;是很有用的。
举例来说,你可以用;xterm;-C来?ampcirc;取传到;console;上的;talk
、write;以及;system;log;的讯息。

options;SYSVSHM


这个参数提供;System;V;共享记忆体;(shared;memory);的支援。
最常使用;SYSVSHM;的是;X;Windows;的;XSHM;功能;(如使用;xanim,
Linux;DOOM;等),因为他可以提高执行速度。如果你使用;X;Windows
或是电子告栏;(BBS),你一定要打开此参数。

options;SYSVSEM


提供;System;V;semaphores;的支援,虽然不常用到,但是它只占一点点
kernel;的空间。

options;SYSVMSG


提供;System;V;messages;的支援,虽然不常用到,但是它只占一点点
kernel;的空间。

注意:;ipcs(1);这个命令会列出正在使用以上三种;SYSV;的功能;的程序
(process)。


_________________________________________________________________
5.3.3.;档案系统的参数



这些参数提供各种档案系统的支援,你一定要包含一种以上的档案系统
以便开机所需。;如果你是从硬碟开机,你必须包含;FFS;;如果你用;diskless
开机;(网路开机),你必须包含;NFS。
此外,你还可以将常用到的档案系统包含进去;(如;MSDOS)。
但是你可以将这些非开机必备的档案系统拿掉,FreeBSD;会利用动态载入模组
(Loadable;Kernel;Module);在你用到档案系统时,自动将档案系统模组从;/lkm
载入使用。



options;FFS


最基本的档案系统支援,如果你是从硬碟开机的,你一定需要它。

options;NFS


网路档案系统(Network;Filesystem?ampcirc;,除非你想要经由网路存取
(mount)其他工作站的档案,否则你不需要它。

options;MSDOSFS


MS-DOS;档案系统。除非你每次开机都要使用;MSDOS;档案系统,
不然你可以将他拿掉,系统会在你使用到;MSDOS;档案系统时,;自动用
LKM;将;MSDOS;档案系统支援载入。;除此之外,你也可以使用
mtools来存取;DOS;的软碟,;这并不需要有;MSDOS;档案系统的支援。

options;``CD9660''


ISO;9660;是;CD-ROM;的档案系统,如果你只是偶尔用到;CD-ROM,
你可以将它拿掉,系统会在使用到;CD-ROM;时自动以;LKM;载入。
此外,用;CD-ROM;听;Audio;CD;不需要;CD9660;的支援。

options;PROCFS


Process;档案系统。这是一个对映记忆体中执行程序的虚拟档案系统,
许多系统工具如;ps;需要;PROCFS。

options;MFS


记忆体映对档案系统;(Memory-mapped;Filesystem)。
这基本上是一个为了达到快速暂存用的;RAM;disk,;当你有许多;swap
空间的时候是很有用的。;一个挂上;(mount);MFS;的好地方是;/tmp,
因为许多程式会利用;/tmp;建立暂时档案。;以下是将;MFS;挂上;/tmp
的方法:;在;/etc/fstab;中奶J以下这行并重新开机或键入;mount
/tmp。


/dev/wd1s2b;;;/tmp;mfs;rw;0;0



注意:;将;/dev/wd1s2b;替换成你的;swap;partition,;你的;swap;partition
在;/etc/fstab;中看起来是这样的:

/dev/wd1s2b;none;swap;sw;0;0



注意:;再来,MFS;无法以;LKM;载入,;一定要将它连结在;kernel;中。

options;QUOTA


奶J;quota;的支援,可以藉以限制使用者能用的硬碟空间。;请参阅
quota(1);的说明;(man;quota)。


_________________________________________________________________
5.3.4.;基本控制卡以及介面卡



这些章节讨论;FreeBSD;的硬碟、磁带机、CD-ROM;的支援。;对於;SCSI;卡;跟
网路卡;我们将在另一章节讨论。



controller;isa0


所有的;PC;都应该奶J;ISA;的支援。如果你的系统是;IBM;PS/2;(Micro
Channel;Architecture),很抱歉现在;FreeBSD;并不支援。

controller;pci0


奶J;PCI;(含;PCI;Plug);的支援。

controller;fdc0


软碟控制卡:;fd0;是;``A:'';磁碟,fd1;是;``B:'';磁碟。;ft0
是接在软碟控制卡上的;QIC-80;磁带机。

注意:;QIC-80;磁带机需要;ft(8);程式的支援。

controller;wdc0


这是主要;(primary);IDE;控制卡的支援。;wd0;跟;wd1;是第一台
(primary);跟第二台;(slave);硬碟。;wdc1;是次要;(secondary);IDE
控制卡,;提供第三台及第四台硬碟;(或者是;IDE;ATAPI;CD-ROM)
的支援。

controller;wcd0


提供;IDE;ATAPI;CD-ROM;的支援,需要;wdc0;或;wdc1
的支援。此外,你还需要;options;ATAPI,;ATAPI_STATIC;的参数。

device;npx0;at;isa?;port;``IO_NPX'';irq;13;vector;npxintr


npx0;是;FreeBSD;浮点运算的呼叫介面,不管你有没有
浮点运算器,这个参数都是;必要;的。

device;wt0;at;isa?;port;0x300;bio;irq;5;drq;1;vector;wtintr


Wangtek;跟;Archive;QIC-02/QIC-36;磁带机的支援。

专属介面;CD-ROM;的支援


以下这些是所谓的;专属介面;CD-ROM。
他们使用专属的控制卡或是音效卡,他们;不是;IDE;或;SCSI;的
CD-ROM。他们大多数是单倍速或双倍速的老机种。



device;mcd0;at;isa?;port;0x300;bio;irq;10;vector;mcdintr


Mitsumi;CD-ROM;(LU002,;LU005,;FX001D).

device;scd0;at;isa?;port;0x230;bio


Sony;CD-ROM;(CDU31,;CDU33A).

controller;matcd0;at;isa?;port;?;bio


Matsushita/Panasonic;CD-ROM;(Creative;Labs;for
SoundBlaster).


_________________________________________________________________
5.3.5.;SCSI;装置支援



这个章节讨论许多种;FreeBSD;支援的;SCSI;控制卡及周边装置。



SCSI;控制卡


以下这几行提供;SCSI;控制卡的支援,只需要奶J你所需要的:

controller;bt0;at;isa?;port;``IO_BT0'';bio;irq;?;vector;btintr


大多数的;Buslogic;控制卡

controller;uha0;at;isa?;port;``IO_UHA0'';bio;irq;?;drq;5;vector
uhaintr


UltraStor;14F;跟;34F

controller;ahc0


Adaptec;274x/284x/294x/394x

controller;ahb0;at;isa?;bio;irq;?;vector;ahbintr


Adaptec;174x

controller;aha0;at;isa?;port;``IO_AHA0'';bio;irq;?;drq;5;vector
ahaintr


Adaptec;154x

controller;aic0;at;isa?;port;0x340;bio;irq;11;vector;aicintr


Adaptec;152x;跟在音效卡上的;Adaptec;AIC-6360;(速度慢!)

controller;nca0;at;isa?;port;0x1f88;bio;irq;10;vector;ncaintr


使用;NCR;5380;or;Trantor;T130;的;ProAudioSpectrum

controller;sea0;at;isa?;bio;irq;5;iomem;0xc8000;iosiz;0x2000
vector;seaintr


Seagate;ST01/02;8;bit;控制卡;(速度慢!)

controller;wds0;at;isa?;port;0x350;bio;irq;15;drq;6;vector
wdsintr


Western;Digital;WD7000;控制卡

controller;ncr0


NCR;53C81x/82x/87x;PCI;SCSI;控制卡

options;``SCSI_DELAY=15''


这个参数使得;kernel;在开机时会先等待;15;秒,;再侦测;SCSI
周边装置,有些速度慢的周边;(如;CD-ROM);需要较长的初始时间。

controller;scbus0


如果你有任何的;SCSI;装置,你就需要这个参数。

device;sd0


支援;SCSI;硬碟。

device;st0


支援;SCSI;磁带机。

device;cd0


支援;SCSI;CD-ROM。

请注意这个;0;并不是说只支援一台或是;SCSI-ID;0,
无论有多少装置都被支援的。

如果你想要指定;SCSI;ID;或是;LUN,请参阅;LINT;中相关的说明。


_________________________________________________________________
5.3.6.;Console,滑鼠,及;X;Server;支援



你一定要在以下两种显示驱动程式中选一种。;大多数的程式经由终端函式库
(如;termcap)控制显示,;不管你选哪一种都应该能执行。



device;sc0;at;isa?;port;``IO_KBD';tty;irq;1;vector;scintr


sc0;是内定的显示驱动程式,它是模拟;SCO;console;的。
使用的时候,将你的环境变数;TERM;设定成;"scoansi";或;"cons25"。

device;vt0;at;isa?;port;``IO_KBD'';tty;irq;1;vector;pcrint


这是;VT200;相容的显示驱动程式,通常是用来给那些不能用;sc0
的机器用的。使用的时候将你的环境变数设成;"vt100";或;"vt200"。



options;``PCVT_FREEBSD=210''


设定;vt0;程式在;FreeBSD;2.1.0;以上的系统执行。

options;XSERVER


奶J;XFree86;的;X;Windows;所需的支援。

device;mse0;at;isa?;port;0x23c;tty;irq;5;vector;ms


支援;Logitech;bus;mouse;或;ATI;InPort;bus;mouse;card.

注意:;如果你使用;serial;mouse;(插在;COM1;上),你并不需要这项参数。

device;psm0;at;isa?;port;``IO_KBD'';conflicts;tty;irq;12;vector
psmintr


使用;PS/2;mouse.


_________________________________________________________________
5.3.7.;Serial;跟;Parallel;Ports



几乎所有的机器都有这东西,如;印表机;或是;Modem;拨接;等等。



device;sio0;at;isa?;port;``IO_COM1'';tty;irq;4;vector;siointr


sio0;到;sio3;是四个;seiral;ports;(即;COM1;到;COM4)。;如果你的
COM4;有内接;Modem,而;COM2;有接;serial;装置,;你必须将;Modem;的
IRQ;改成;2;(IRQ;2;就是;IRQ;9)。;如果你有;multiport;serial
卡,请阅读;sio(4)的资料。;有些显示卡;(如某些;S3;的卡);使用
0x*2e8;的;IO;Address,;而有些便宜的;serial;卡没有完全支援
16-bit;IO;Address,;这些会互相突而使得;COM4;失效。;每个
serial;port;都需要有一个独立的;IRQ;(除了;Multiport;卡),
所以内定给;COM3;跟;COM4;的;IRQ;是不能使用的。

device;lpt0;at;isa?;port?;tty;irq;7;vector;lptintr


lpt0;到;lpt2;是三个印表机的;port,
大多数人只有一台印表机,你可以将没有用到的移除。


_________________________________________________________________

5.3.8.;网路



FreeBSD,跟一般;UNIX;一样,非常重视网路。
因此,就算你没有网路卡,也请注意那些拨接服务支援。



options;INET


网路的支援。就算你不需要网路,你还是需要此参数,
许多程式至少需要;loopback;网路;(即,连接自己的电脑),
所以这是必要的。

Ethernet;网路卡


以下是网路卡的支援,如果你没有网路卡,你可以跳过。



device;de0


Digital;Equipment;DC21040;PCI;Ethernet;网路卡

device;cx0;at;isa?;port;0x240;net;irq;15;drq;7;vector;cxintr


Cronyx/Sigma;multiport;sync/async;(with;Cisco;or;PPP
framing)

device;ed0;at;isa?;port;0x280;net;irq;5;iomem;0xd8000;vector
edintr


Western;Digital;跟;SMC;80xx;;Novell;NE1000;跟;NE2000;
3Com;3C503

device;el0;at;isa?;port;0x300;net;irq;9;vector;elintr


3Com;3C501;(速度慢!)

device;eg0;at;isa?;port;0x310;net;irq;5;vector;egintr


3Com;3C505

device;ep0;at;isa?;port;0x300;net;irq;10;vector;epintr


3Com;3C509

device;fe0;at;isa?;port;0x240;net;irq;?;vector;feintr


Fujitsu;MB86960A/MB86965A;Ethernet;网路卡

device;fea0;at;isa?;net;irq;?;vector;feaintr


DEC;DEFEA;EISA;FDDI;网路卡

device;ie0;at;isa?;port;0x360;net;irq;7;iomem;0xd0000;vector
ieintr


AT&T;StarLAN;10;and;EN100;;3Com;3C507;;unknown;NI5210

device;ix0;at;isa?;port;0x300;net;irq;10;iomem;0xd0000;iosiz
32768;vector;ixintr


Intel;EtherExpress;16

device;le0;at;isa?;port;0x300;net;irq;5;iomem;0xd0000;vector
le_intr


Digital;Equipment;EtherWorks;2;跟;EtherWorks;3;(DEPCA,
DE100,;DE101,;DE200,;DE201,;DE202,;DE203,;DE204,;DE205,
DE422)

device;lnc0;at;isa?;port;0x300;net;irq;10;drq;0;vector;lncintr


Lance/PCnet;cards;(Isolan,;Novell;NE2100,;NE32-VL,
PCnet-PCI)

device;ze0;at;isa?;port;0x300;net;irq;5;iomem;0xd8000;vector
zeintr


IBM/National;Semiconductor;PCMCIA;Ethernet;网路卡

device;zp0;at;isa?;port;0x300;net;irq;10;iomem;0xd8000;vector
zpintr


3Com;PCMCIA;Etherlink;III



注意:;你必须更改某些网路卡;(如;NE2000);的;port;或;IRQ,因为这些卡的
port/IRQ;并没有一定的标准。

pseudo-device;loop


loop;是;TCP/IP;的通用;loopback;装置。;如果你;telnet;或;ftp
localhost,他们将会经由;loopback;连接。这是必须的。

pseudo-device;ether


当你有网路卡的时候你才需要;ether。

pseudo-device;sl;number


sl;提供;SLIP;(Serial;Line;Internet;Protocol)
的支援。SLIP一经几乎被;PPP;所取代,因为;PPP;功能较强。其参数
number;代表同时;SLIP;连接数目的个数。;关於;SLIP
的更多资料,请参阅;SLIP;Client;或;SLIP;Server;。

pseudo-device;ppp;number


ppp;提供;kernel-mode;PPP;(Point-to-Point;Protocol)
的支援。另外还有一种;user-mode;PPP;(tun)
提供连线时更多的弹性,以及自动连接的功能。;如果你依然想用
kernel-mode;PPP,请阅读;kernel-mode;PPP;。;如同;sl;一样,其参数
number;代表同时连接;PPP;的数目。

pseudo-device;tun;number


tun;提供;user-mode;PPP;的支援。;这个模式的;PPP
相当容易设定,而且连线速度快。
而且他还包含更多的新功能,如欲连线时自动拨号连线,
停滞一段时间後自动断线。其参数;number;代表同时连接;PPP;的数目。
请阅读;user-mode;PPP;以获得更多的资讯。

pseudo-device;bpfilter;number


Berkeley;封包过滤器;(packet;filter)。
提供网路监听的功能,这些网路上的资料可经由;tcpdump(1)
处理显示,以增进网路安全的目的。;其参数;number
代表同时提供网路介面监听数目的多少。
除非你想要使用网路监听的功能,否则你不需此功能。
有少数网路卡不支援此功能。


_________________________________________________________________
5.3.9.;音效卡



内附的;GENERIC;kernel;并不包含音效卡的支援,;你必须参考;LINT
这个设定档来奶J音效卡的支援;(只有;LINT;尼t所有音效卡的设定)。



controller;snd0


标准音效呼叫介面,所有的音效卡;(除了;pca;外);都需要此参数。

device;pas0;at;isa?;port;0x388;irq;10;drq;6;vector;pasintr


ProAudioSpectrum;digital;audio;跟;MIDI.

device;sb0;at;isa?;port;0x220;irq;7;conflicts;drq;1;vector;sbintr


SoundBlaster;digital;audio.

注意:;如果你的;SoundBlaster;使用不同的;IRQ;(如;5),;你必须将设定中的
irq;7;改成;irq;5,;并且移除;conflicts,此外,你还需要奶Joptions
``SBC_IRQ=5'';的设定。

此外,你还需要奶J以下几行:

device;sbxvi0;at;isa?;drq;5


SoundBlaster;16;digital;16-bit;audio.

注意:;如果你的;SB16;使用不同的;16-bit;DMA;channel;(如;6;或;7),将
drq;5;改成;drq;6;或;drq;7,并奶Joptions;"SB16_DMA=6";的设定。

device;sbmidi0;at;isa?;port;0x330


SoundBlaster;16;MIDI;介面。如果你有;SB16,
你一定要奶J此参数,?ampthinsp;则你的;kernel;将无法完成编译。

device;gus0;at;isa?;port;0x220;irq;10;drq;1;vector;gusintr


Gravis;Ultrasound.

device;mss0;at;isa?;port;0x530;irq;10;drq;1;vector;adintr


Microsoft;Sound;System.

device;opl0;at;isa?;port;0x388;conflicts


AdLib;FM-synthesis;音效卡,如果你有;AdLib、SoundBlaster;跟
ProAudioSpectrum,你需要此参数。;此外,你可以用;playmidi;来播放
MIDI;音效;(在;ports;收集里)。

device;mpu0;at;isa?;port;0x330;irq;6;drq;0


独立的;Roland;MPU-401;音效卡。

device;uart0;at;isa?;port;0x330;irq;5;vector;``m6850intr''


独立的;6850;UART;MIDI;介面。

device;pca0;at;isa?;port;``IO_TIMER1'';tty


利用;PC;喇叭模拟数位音效,此音效的效果很差,;而且要花不少;CPU
时间,你应该要知道这点。;在你没有音效卡时才考虑此功能。



注意:;你还可以阅读;/usr/src/sys/i386/isa/sound/sound.doc。
此外,你还必须建立相关的;device;nodes;给音效卡使用。


_________________________________________________________________
5.3.10.;虚拟装置;(Pseudo-devices)



虚拟装置提供一些特殊的支援,但它们并不是真正的硬体介面。;有一部份的
网路相关的;虚拟装置并不在下列说明中。



pseudo-device;gzip


gzip;让你可以执行被;gzip;压缩的;FreeBSD;程式,由於;/stand
中的程式都是被压缩过的,;因此奶J此功能是个好主意。

pseudo-device;log


log;提供系统记录;(system;log);的功能,;这是必须的。

pseudo-device;pty;number


pty;代表;``虚拟终端机;(pseudo-terminal)'';或上线人数的多少。
许多程式如;telnet、rlogin、xtermx;和;emacs
等都会使用它。GENERIC;kernel;内定只有;16;的;ttys,
你可能会想要将它提高到;32;或;64;以上。

pseudo-device;snp;number


监看装置;(Snoop;device)。提供你监看其他;tty;的资讯;(使用
watch(8);命令),这牵涉到系统安全以及
使用者隐私权的问题,是可有可无的功能。

pseudo-device;vn


Vnode;驱动程式。允许将一个档案利用;vnconfig(8);当成一个
partition;来使用。通常拿来建立;floppy;disk;image;或充当;swap
装置;(如跟;MS;Windows;共享;swap;file),是可有可无的功能。


_________________________________________________________________
5.3.11.;摇杆、PC;喇叭及其他杂七杂八的



本章及讨论;FreeBSD;支援的其他杂七杂八的装置,;这些都是;GENERIC;kernel
所没有的功能。;你可能会想参照;LINT;设定档的内容。



device;joy0;at;isa?;port;``IO_GAME''


PC;摇杆的支援。

pseudo-device;speaker


支援;IBM;BASIC;格式的;PC;喇叭音效。;有些有趣的程式;(如
/usr/sbin/splrtest、/usr/games/piano);会使用到它。

有关;PC;喇叭的的数位音效请参阅;pca0;。


_________________________________________________________________
5.4.;建立;device;nodes



几乎所有;kernel;支援的装置,都有一个在;/dev;下的;``node''
来相对应。这些;nodes;看起来像是一般的档案,
但是实际上应用程式可以透过这些;nodes;来存取;kernel;的资料。;你可以用
shell;script;/dev/MAKEDEV;来帮助你建立;nodes。
虽然在安装过程中已经帮你建立一些必备的;nodes,
是你一定会想再新增你所需要的
nodes,尤其是增s功能或安装新硬体的时候。;假A想新增一台;IDE
CD-ROM,你必须在;kernel;设定档中奶J相关的钏w,如G

controller;wcd0

这表示你必须看看在;/dev;下有没有;wcd0;的;nodes。;比方说是
wcd0c、rwcd0c;等等。;假设没有这些;nodes,你必须建立它们:

#;cd;/dev;;sh;MAKEDEV;wcd0

当这个;script;执行完毕时,你应该会看到;wcd0c;或;rwcd0c;等;nodes。

又例如新增音效卡的;nodes:

#;cd;/dev;;sh;MAKEDEV;snd0

这样将会建立音效卡所需的;nodes。
_________________________________________________________________
5.5.;发生问题的解决方法



再建立自订;kernel;时,有四种问题可能发生:



Config;发生错误


如果;config;抱怨这个错误时,你的;kernel;设定档可能有错误,
config;会指出哪些行错了,请重新检查那些行。;比方说你看到:


config:;line;17:;syntax;error

表示你的;kernel;设定档的;17;行有错误,请用编辑器修正。

Make;失败


如果执行;make;时发生错误,有可能是你的;kernel;设定档有错误,
但是;config;程式并没有检查出来,请再检查;kernel
设定档是否有错误,;或是缺少该有的参数。;如果在编译过程中发生
"compiler;internal;error";或;"signal;11";等等,
可能你的硬体设备不是很稳定。

Kernel;无法开机


如果你的新;kernel;无法开机,或是无法侦测到你新左熊w体装置,
你可以在开机时,键入其他;kernel;的名称;(如;boot:;/kernel.old),
如果连其他;kernel;都无法开机,你可以试试;kernel.GENERIC。
在用旧的;kernel;开机後,检查你的;kernel;钏w档是否有误,
修改後再重新编译一个新的;kernel。;你可以参考;/var/log/messages
中的开机记录,或是执行;dmesg(8)。

注意:;在;FreeBSD;中有另一种;file;flag;来保护重要档案,
如果你无法移动或删除;/kernel,你可以执行:

#;chflags;noschg;/kernel

如果你想保护;/kernel;避免人为疏失破坏它,请执行:

#;chflags;schg;/kernel

Kernel;可以开机,但;ps;或是;w;发生错误


如果你更新;kernel;原始程式;(如从;2.1.0-RELEASE;升级到
2.2-CURRENT),你必须一更新;(或重新编译);一些重要的档案,;如
ps(1)、vmstat(8)或是libkvm。

标签: