Contributed by Jake Hamby .
6 October 1995. 这个略大的章节会讨论如何自订你的 FreeBSD kernel 。
这个章节适合初学者以及经验丰富的管理者 。
5.1. 为何要自订 kernel ?
5.2. 建⒁约鞍沧耙桓鲎远┑?nbsp;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) 数目等於 2016 *
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
【系统核心 自订 FreeBSD Kernel】 如果你想保护 /kernel 避免人为疏失破坏它,请执行:
# chflags schg /kernel
Kernel 可以开机,但 ps 或是 w 发生错误
如果你更新 kernel 原始程式 (如从 2.1.0-RELEASE 升级到
2.2-CURRENT),你必须一更新 (或重新编译) 一些重要的档案, 如
ps(1)、vmstat(8)或是libkvm 。
- Wacom推出手写板Bamboo 支持Vista系统
- Windows11未激活怎么换回原来的壁纸 win11系统未激活
- Vista系统超酷遥控器 全面支持SlideShow
- 怎么看华为手机是不是鸿蒙系统
- 体验Windows Vista系统的程序兼容模式
- Vista系统信息设置随心所欲
- 微软: Vista中UAC值得所有操作系统效仿
- 苹果x怎么降级系统
- 研招网调剂系统什么时候关闭
- 微信系统处于通话状态怎么关闭
