广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 5460 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
joewu692
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x11
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[FreeBSD][转载] FreeBSD 核心设定
为什么要定制一个核心?
建立一个定制的核心是每个 Unix 系统管理员所必须经历的重要仪式之一。 虽然会耗去不少时间,不过这项过程将带给你的 FreeBSD 系统不少好处。跟必 须支援绝大部分的 SCSI 卡、网路卡,以及其他常见的硬体周边的 GENERIC 核心不同,一个定制的核心只需支援 你的 电脑硬体,这样有下列几个好处:


开机的速度较快,因为无须浪费时间侦测你没有的硬体装置。

一个定制的核心通常使用较少的记忆体。这是很重要的一点,因为核心 程序必须一直存在于记忆体之中,占的记忆体越多,你的程式能用的记忆体 就越少。对一些记忆体有限的系统而言,这点尤其重要。

最后一点,有些核心参数可以让你微调,以适合你的系统使用;你也可 以加入一些原本不在 GENERIC 核心之中的硬体装置 驱动程式,像是音效卡。

建立并安装一个定制的核心
首先,让我们快速的浏览一下 kernel build directiry。所有我们提到的 目录都在 /usr/src/sys 这个主目录之下,你也可以透 过 /sys这个 link 来存取。在这个目录下,有不少的副 目录,其中放置了核心各不同部分的程式、资料等等。在这些目录之中,有两个 是本章讨论的重点,一个是 i386/conf─你将会在这个 目录下编写你的核心设定档;另一个是 compile 目录─ 你将在这个目录下编译你的核心。注意一下这个目录的逻辑结构,所有支援的硬 体装置驱动程式、档案系统、参数选项,都放在各自的目录。另外,所有放在 i386 目录下的只跟 PC 硬体有关,而 i386 目录之外的其他目录,则是其他 FreeBSD 可能会移植过去的平 台会共用到的部分。

Note: 如果你的系统内 没有 /usr/src/sys 这个目录,那表示你没有安装好核心的原始程式码,最快速的安 装方式,就是以 root 身分执行 /stand/sysinstall,选择 Configure,选择 Distributions,选择 src,最后 选择 sys 选项。

接下来,切换到 i386/conf 这个目录,并且将 GENERIC 复制一份,并给这个档案一个易于辨认名称, 这个名称就是你的核心名称。例如:

  # cd /usr/src/sys/i386/conf
  # cp GENERIC MYKERNEL
依照惯例,核心名称最好全用大写字母。此外,如果你要管理很多部硬体 配备不同的机器,在核心名称后加上各个主机名称是个不错的做法。在接下来 的章节,我们会用 MYKERNEL 来当作范例。

Note: 在做接下来的动作,请确定你是以 root 身分执行,不然你将会看到 permission denied 这个错误讯息。

现在,用你最上手的编辑器编辑 MYKERNEL。 如果你才刚装好你的系统,那么系统里面唯一可用的编辑器大概是 vi 了,vi 是个颇复杂的编辑器,在这里我们不加以赘 述,你可以参考 bibliography 的介绍 。此外,FreeBSD 还提供了一个叫 ``ee'' 的简单编辑器,如果你是 新手,ee 是个不错的选择。你可以随心所欲的修改你的核心设定档最上面的注 解,反映出你做过的设定或修改,以别于 GENERIC。

如果你曾经在 SunOS 或是其他 BSD 作业系统下建立过核心,你对这个档案 的不少内容会有种似曾相似的感觉。如果你才刚从其他作业系统─像是 DOS,转 移过来,你可能会被 GENERIC 的内容给吓到,所以请慢 慢并仔细地阅读 设定档 这章 节。

Note: 如果你想把你的旧版核心更新成新版的,你最好从你抓取核心原始程式码 的地方顺便抓取新版的 config(8) ,相关的原始程式码会被放置在 /usr/src/usr.sbin,所以在做接下来的动作前,你必 须先下载这些程式码,编译,然后安装到你的系统里头。

当你做完以上步骤后,输入以下指令来编译并安装你的新核心:

  # /usr/sbin/config MYKERNEL
  # cd ../../compile/MYKERNEL
  # make depend
  # make
  # make install
新的核心将被复制到根目录,叫做 kernel,而旧的 将被更名成 /kernel.old。现在关闭你的系统并重开机 以便系统能载入新的核心。如果你遇到任何困难,请参考本文件最后的 troubleshooting 指示。无论是否 能开机成功,你最好仔细的阅读 无法开机 这个小节。

Note: 如果你加装了任何新硬体装置(像是音效卡),你可能要到 /dev 目录下增加一些装置节点,这样你才能够使用这些 硬体装置。

核心设定档
核心设定档的格式是很简单的,每一行包含了一个关键字(keyword) 与一个 或多个参数,而大多数的设定都只包含一个参数。# 号之 后的叙述都是注解,并会被程式忽略。接下来的每个小节,将依序介绍每个列在 GENERIC 的参数,虽然各相关主题(如网路)的关键字会 放在同一小节,但是这些关键字可能散落在 GENERIC 的 各处。 详细的列出各个选项(option),而 LINT 列出绝大部分的选项(options),比起在同目录下 的 GENERIC,有更详尽的解释。如果你不确定某一行设 定的目的或是否必要,请先看看 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(8) 时会出错。

如果数字是表示数目、个数,如 maxuser 64 这个 设定,则 不要 加双引号。

目前 FreeBSD CURRENT 版本已经解除上述限制,不论是哪种形式的数字 都不需要加双引号。

本章节的范例,在文字形式的数字前后仍加了双引号(" ),如果你使用 FreeBSD CURRENT,则请自动去除双引号。

7.3.1. 一定要有的关键字
以下介绍的关键字,必须存在于每个核心设定档之中。


machine arch
第一个关键字 machine,表示 FreeBSD 执行 的硬体平台,不是 Intel 386 (与相容机种)就是 DEC Aplha 两者,其 参数分别为 i386 与 alpha。

cpu "cpu_type"
接下来的关键字是 cpu,设定 FreeBSD 所能 支援的 CPU。i386 系统能够设定的 cpu_type 值包括以下几种:


I386_CPU

I486_CPU

I586_CPU

I686_CPU

以下则是采用 DEC Alpha CPU 机种能设定的 cpu_type 值:


EV4

EV5

在 GENERIC 核心中同时设定了数个不同的 cpu 参数,但是对一个量身定制的核心而言,最 好只设定适合你 CPU 的参数。例如你有一台使用 Pentium CPU 的机器 ,就设定 cpu 值是 I586_CPU 。

ident machine_name
接下来,我们设定 ident,这是一个核心的 识别字。你应该自己命名一个容易辨认的名称,以有别于 GENERIC 的名称─GENERIC。放在 ident 后的参数,将在你用这个核心开机时显示在萤幕上,如 果你同时设定了数个核心(例如实验性质的),采用不同的名称是个不错 的做法。注意,如同 machine 与 cpu 这两个设定,如果你的核心名称包含数字,请记得用 双引号把它包起来。

核心名称将会使用 -D 参数传给编译器,所以 不要用像是 DEBUG 或是其他可能干扰编译器的 机器、CPU 名称,如 vax。

maxusers number
这个设定的大小值定义了重要的 system tables。这个数值粗略 假设你的机器同时会有多少使用者。然而,在一般情形下,你最少要 设定 4,以上,特别是你要执行 X Window 或 是编译程式。原因是 maxusers 值限定了系统 同时可有多少个 processes,其算法是 20 + 16 * maxusers。如果你设定 maxusers 值是 1,则你的系统只能同时存在 36 个 processes,包括 18 个(或更多)系统开机即占去的 processes,如果 你执行了 X Window,则又要吃掉 15 个以上。甚至执行阅读一个 man page 也会开启九个 processes 来过滤、解压缩、然后显示出来。设 定 maxusers 4,则系统可以同时有 84 个 processes,对任何人应该都是足够的。当你执行程式时,得到像是 ``proc table full'' 这样的错误讯息,或是你 要架设一个同时会有很多人来存取的网站(如 Walnut Creek CDROM 的 FTP),你就要增加这个设定的值,然后重新编译核心。

Note: maxuser 这个参数 并不是 代表着可以同时使用你的电脑的使用者。 它只是基于系统中最多使用者以及每个使用者执行程式的个数, 对于设定了一些系统所使用的表格的合理大小。 有一个关键字的值则 真的 限制了可以同时 远端连线 (remote logins) 的人数是 pseudo-device pty 16.

config kernel_name root on root_device
这行设定指定核心的名称与所在,传统上,Unix 核心被叫做 vmunix,但是在 FreeBSD 上,我们直接用 kernel 来称呼核心。你不可以随意使用 kernel 以外的字来当作核心名称,不然许多 系统程式会无法正确执行。这个设定的第二部分告诉系统在哪个磁碟机 上的哪个分割区可以找到 root filesystem 与核心。一般而言, wd0 表示核心不在 SCSI 磁碟上,而 da0 表示核心在 SCSI 磁碟上。

7.3.2. 一般选项
以下参数设定核心能支援的档案系统与其他选项。


options MATH_EMULATE
如果你的电脑没有浮点运算处理器(386 或 486SX),你可以加入这 行,使得核心提供软体模拟的浮点运算处理器。如果你用的是 Pentium 、486DX,或是 386SX、486SX,但是另外加装 387、487,则你不需要 这行设定。

Note: 这个模拟的浮点运算处理器并不是很精 确,如果你没有浮点运算器,且你需要较高的精度,你可以改用 GPL_MATH_EMULATE 参数,这将会 使用 GNU 的 浮点运算模拟器。至于为什么这个模拟器不是系统预设值,是因为 GUN 使用执照的关系。

options "COMPAT_43"
使系统相容 4.3BSD,不要拿掉这一行,不然部分程式将无法正常 执行。

options UCONSOLE
允许使用者撷取 console 资讯,对 X Window 颇为有用。举例来 说,你可以输入 xterm -C 来开启一个 console xterm,这个视窗将显现任何 write、 talk 等指令的讯息,以及你送出去的讯息。当 然,kernel 产生的讯息也会在这里出现。

options SYSVSHM
提供 System V Shared memory(SHM) 的支援,最常用到 SHM 的 应该是 X Window 的 XSHM 延伸,不少绘图相关程式(像是影片拨放程 式 XAnim 与 Linux DOOM 游戏)会自动使用 SHM 以提供额外的速度。 如果你要使用 X Window,你最好加入这个选项。

options SYSVSEM
支援 System V semaphores,比较不常用到,但是只在 kernel 中 占用几百位元组的空间。

options SYSVMSG
支援 System V messages,一样的,只占用 kernel 数百位元组的 空间。

Note: ipcs(1) 指令可以显示出任何使用到上述三个 System V 功能的 processes。

7.3.3. 档案系统选项
以下的选项可支援不少档案系统,你至少要加入一样支援你开机装置的档 案系统,一般来说,如果你要从硬碟开机,则要有 FFS ,如果你要使用无磁碟工作站,从乙太网路上开机,则要有 NFS 。你可以在你的核心加入其他常用的档案系统,但可随意移除其他 不常用到的档案系统(也许是 MS-DOS 档案系统?),因为在你第一次挂入此类 核心不支援的档案系统时,你的核心会从 /modules 目录动态载入模组来支援之。


options FFS
最基本的硬碟档案系统,如果你要从硬碟开机,就留着。

options NFS
网路档案系统(Network Filesystem, NFS),除非你要从网路上的 其他主机挂入目录,不然你可以用 # 号注解掉这行设定。

options MSDOSFS
MS-DOS 档案系统。除非你要在开机时挂入一个 DOS 格式的硬碟, 不然你可以放心的把这行注解掉。如同前述,在你第一次挂入一个 DOS 分割区时,核心将会自动载入模组来支援它。此外, mtools 这个相当不错的软体(可在 ports 里面找到), 可以让你存取 DOS 磁片,而不需要挂入或卸载软碟(而且也不需要 MSDOSFS 的支援)

options "CD9660"
CD-ROM 使用的 ISO 9660 档案系统。如果你没有光碟机,或是很 少用光碟机读取资料,可以注解掉这一行(核心会在第一次挂入时动态 载入模组以支援之)。音乐 CD 则不会用到这个档案系统。

options PROCFS
Process filesystem。这是一个虚拟的档案系统,挂在 /proc 之下,允许一些程式,像是 ps(1) 来读取资料,提供你正在执行的 processes 的资讯。

options MFS
Memory-mapped file system。提供 RAM disk,以供需要快速存取 的资料或是暂存资料用,如果你分割了不小的 swap 空间,使用这个选 项可以提供给你不少好处。把 /tmp 挂入到 MFS 分割区是一个相当好的想法,因为不少程式都会在此暂存资料。 要把 /tmp 挂到 MFS RAM disk,可以修改 /etc/fstab,加入以下那一行,然后重开机, 或是键入 mount /tmp:

  /dev/wd1s2b   /tmp mfs rw 0 0
Note: 把 /dev/wd1s2b 换成你的 swap 分割区 ,swap 分割区会列在 /etc/fstab,看起来 像下面那一行:

  /dev/wd1s2b none swap sw 0 0
Note: 记住,MFS 档案系统 不能 够使用动态载入的方式,如果你要使用它,你必须将这 设定加入到你的核心。

options "EXT2FS"
Linux 原生档案系统,让你可以读、写 Linux 分割区,如果你的 电脑同时装有 FreeBSD 跟 Linux,加入这个选项,可以方便的共享两 个系统的资料。

options QUOTA
启动磁碟配额限制(Disk Quota)。如果你有一台提供公众服务的 机器,且你不希望用完 /home 分割区的空间 ,你可以为设定使用者可用的磁碟配额, 磁碟配额 有更详尽的说明。

7.3.4. 基本的控制器与装置
本小节介绍 FreeBSD 支援的磁碟、磁带与 CD-ROM 控制器。这个小节与 SCSI 控制器还有 网路卡的部分是分开的。


controller isa0
所有 FreeBSD 所支援的 PC 都需要这行设定。如果你使用 IBM PS/2 (微通道架构)电脑,则你无法在该机器上执行 FreeBSD。

controller eisa0
如果你的主机板上有 EISA 汇流排,加入这个设定。使用这个选项 可以自动侦测并设定所以连接在 EISA 汇流排上的装置。

controller pci0
如果你的主机板有 PCI 汇流排,就加入这个选项。使用这个选项 可以自动侦测 PCI 卡并 gatewaying from the PCI to the ISA bus.

controller fdc0
软式磁碟机控制器: fd0 是 A: 磁碟机,fd1 是 B: 磁碟鸡。ft0 则是连接到软式 磁碟机控制器的 QIC-80 磁带机。如果你没有上述装置,就注解掉相关 的几行设定吧。

Note: QIC-80 磁带机支援需要一个独特的程式,叫做 ft(8),请 查阅 manual page 以得到详细资讯。

controller wdc0
这是主要的 IDE 控制器。wd0 跟 wd1 分别是 master 与 slave。以此类推,wdc1 是次要的 IDE 控制器,而你可能在上面接了第三或第四个 硬碟,或是 IDE CD-ROM。注解掉没用到的那几行(例如你使用 SCSI 硬 碟,你可能可以注解掉全部六行)。

device acd0
这个装置提供对 IDE CD-ROM 的支援。确定你留下了 wdc0 与 wdc1,当你有一个以上的 IDE 控制器,且 CD-ROM 接在次要的控制器上。另外,你必须加入 options ATAPI,这样才能正常无误的使用 CD-ROM。

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 and Archive QIC-02/QIC-36 磁带机的支援。

专属介面 CD-ROM 的支援
接下来的设定是一些采用专属介面的 CD-ROM 的驱动程式。这些装置使用自己的控制卡,或是连接到音效卡 上,如声霸卡 16。这些控制器不属于 IDE 或 SCSI 控制器,大多数老旧的一倍数与二倍数 CD-ROM 采用这些介面, 而四倍数以上的几乎都使用 IDE 或是 SCSI 介面。


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 (与创巨声霸卡一起搭售)。

7.3.5. SCSI Device Support
本小节介绍不少 FreeBSD 支援的 SCSI 控制器与装置。


SCSI 控制器
接下来的十余行介绍各式各样 FreeBSD 支援的 SCSI 控制器,注 解掉其他的,只留下你有的:


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

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 或 Trantor T130 的 ProAudioSpectrum 音 效卡。

controller sea0 at isa? bio irq 5 iomem 0xc8000 iosiz 0x2000 vector seaintr
Seagate ST01/02 8 位元控制器(颇慢!)。

controller wds0 at isa? port 0x350 bio irq 15 drq 6 vector wdsintr
Western Digital WD7000 控制器

controller ncr0
NCR 53C810, 53C815, 53C825, 53C860, 53C875 PCI SCSI 控制器

Note: 本设定亦支援 Diamond FirePort控制器。

options SCSI_DELAY=15000
这行设定告诉核心等待 15 秒钟,以供 SCSI 控制器侦测你电脑上 的 SCSI 装置。如果你只有 IDE 硬碟,你可以不要理会这个设定,不 然你可能会想要降低这个值,也许降到五秒,以增加开机的速度。如果 你发现降低后,FreeBSD 无法正确辨认你的 SCSI 装置,那么你该提高 这个值,延长等待时间。

controller scbus0
如果你有任何 SCSI 控制器,必须加入这行以提供一般性的 SCSI 支援。如果你没有任何 SCSI 装置与控制器,你可以注解掉一行,以及 接下来的几行。

device da0
对 SCSI 硬碟的支援。

device sa0
对 SCSI 磁带机的支援。

device cd0
对 SCSI CD-ROM 的支援。

device ch0
支援可自动换片的 SCSI 媒体,像是磁带柜。

device pass0
CAM 穿透支援

注意上面的数字 0 可能会造成一些误会: 这些所有的装置的组态在被发现的时候就已经自动的设定好了, 无论有几个装置与 SCSI 汇流排连结, 也不管到底他们的 ID 是多少。

如果想要 ``知道(wire down)'' 特定的 ID 对应的装置的种类,请参考在 LINT 核心设定档中对应的部分。

Console、Bus Mouse、键盘、以及 X Server 的支援
你必须在两种 console 模式中选择一个,如果你要在 X Window 下使用 vt220 console,就加入 XERVER 选项,并加入 bus mouse 或 PS/2 滑鼠的选 项。


device sc0 at isa? port "IO_KBD" tty irq 1 vector scintr
sc0 是预设的 console 驱动程式,绝大部分 全萤幕程式都透过 termcap 这类 terminal database library 来存取 console,因此不论你用这个驱动程式或是 VT220 相容 console 驱动程式 vt0,其间并无太 大差别。如果使用 sc0,且你在登入系统后,执行全萤幕程式遇到问题 ,请将你的 TERM 设定成 ``scoansi''。

controller atkbdc0 at isa? port IO_KBD tty
键盘控制器 atkbdc 提供 AT 键盘输入以及 PS/2 指标装置的 I/O 服务。键盘驱动程式 atkbd 与 PS/2 滑鼠驱动程式 psm 需要 这个控制器,所以不要移除它。


options "KBD_RESETDELAY=X", options "KBD_MAXWAIT=Y"
键盘驱动程式 atkbd 与指标输入装置 驱动程式 psm 可跟 atkbdc 要求要在开机时重置这些装置。有时候这些装 置需要较长时间来回应重置命令。这两个选项告诉 atkbdc 该等多久;驱动程式最多将等待 X * Y 毫秒,如果还是没回应就放弃。如果驱动 程式无法正确的侦测到装置,你可能需要增加这些值。预设的 X 值是 200 毫秒, y 值是 5 毫秒。

options "KBDIO_DEBUG=N"
设定除错等级,预设值是 0,隐藏所有除错输出。

Note: 每个系统只能设定一个 atkbdc 装置。

device atkbd0 at isa? tty irq 1
atkbd 驱动程式,与 atkbdc 控制器一起作用,提供连接到 AT 键盘控 制器的 AT 84 键键盘与 AT 加强型键盘的存取服务。

device vt0 at isa? port "IO_KBD" tty irq 1 vector pcrint
这是一个相容 VT220 的 console 驱动程式,并向下相容 VT100/ 102。在部分与 sc0 相冲的笔记型电脑上,这个 驱动程式运作良好。当然,当你登入系统时,记得设定 TERM 参数为 vt100 或是 vt220。 当连接到网路上许多电脑时,这个驱动程式也常是很有用的, 这是因为许多的电脑上的 termcap 或是 terminfo 并没有 sc0 的资料 -- 而 vt100 的资料几乎所有的平台上都有支援。


options "PCVT_FREEBSD=210"
vt0 console 驱动程式需要这个选项 。

options XSERVER
只能跟 vt0 console 驱动程式搭配使 用。这个驱动程式包含了在 vt0 console 驱动程式下执行 XFree86 X Window Server 的程式码。

device mse0 at isa? port 0x23c tty irq 5 vector ms
如果你有罗技(Logitech) 或 ATI InPort bus mouse 介面卡,就 加入这个装置。

Note: 如果你用序列埠滑鼠,就别理会这两行设定与说明,并记得看看 序列 埠是否有启 动(通常是 COM1)。

device psm0 at isa? port "IO_KBD" conflicts tty irq 12 vector psmintr
如果你的滑鼠连接到 PS/2 滑鼠埠,就使用这个装置驱动程式。

序列埠与并列埠
绝大部分的系统都会有序列埠与并列埠,如果你有一台印表机,连接到其 中某个埠,可以看看 列印 这个章节,相 信可以给你不少助益。如果你要使用数据机,Dialup access 章节,对序列埠的设定与这些装 置的用法,有更详尽的介绍。


device sio0 at isa? port "IO_COM1" tty irq 4 vector siointr
sio0 到 sio3 可看做是 MS-DOS 系统中的 COM1 到 COM4。如果你使用内接式的数据 机,且占用 COM4,而你的系统又有 COM2,则你必须修改数据机的 IRQ 为 2(IRQ 2 跟 IRQ 9 是一样的),这样你才能正常使用数据机。如果 你有一张多埠序列卡,请参阅 sio(4) 以得到更详细的资讯。部 分显示卡(特别是使用 S3 晶片的卡),用到 0x*2e8 这个 I/O 位址,而一些便宜的序列卡,没办法正确解码 16 位元的 I/O 定址空间,因此两张卡会相冲,导致 COM4 无法正常使 用。

每个序列被都要有一个唯一的 IRQ(除非你用的是可以共享中断的 多埠卡),所以 COM3 与 COM4 预设的 IRQ 将无法使用。

controller ppbus0
提供对并列埠的支援

device ppc0 at isa? port? tty irq 7
ISA-bus 并列埠介面

device lpt0 at ppbus?
提供使用并列埠的印表机的支援。

Note: 要使用并列埠印表机,就必须同时加入上面三行设定。

网路
FreeBSD,与一般的 Unix 一样,特别强调网路功能。就算你没有网路卡 ,你仍须注意一定要有的网路设定,与拨接网路服务。


options INET
提供网路支援。就算你不打算连上网路,你还是要留着这个选项。 绝大部分的程式,至少需要回溯介面(像是与你自己的电脑建立网路连 线),因此这个选项是一定要有的。

乙太网路卡
接下来的几行,介绍不少乙太网路卡,如果你没有网路卡,你可以 注解掉全部的网路卡设定。除此之外,你可留下能支援你网路卡的驱动 程式。


device cs0
IBM Etherjet 与其他使用 Crystal Semi CS89x0 晶片的网 路卡。

device de0
使用 DEC DC21040、DC21041、DC21140 等晶片的网路卡。

device fxp0
Intel EtherExpress Pro/100B

device vx0
3Com 3C590 与 3C595 (有臭虫!)

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 and 8216晶片,以及 Novell NE1000、NE2000,3Com 3C503,HP PC Lan Plus (HP27247B 与 HP27252A) 等等网路卡。

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 与 EN100; 3Com 3C507; unknown NI5210; 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 网路卡 (Isolan, Novell NE2100, NE32-VL)

device xl0
使用 3Com Etherlink XL 系列 PCI 乙太网路控制晶片 (3C905B 与相关产品)的网路卡。

device ze0 at isa? port 0x300 net irq 5 iomem 0xd8000 vector zeintr
使用 IBM/National Semiconductor PCMCIA 乙太网路控制 晶片的网路卡。

device zp0 at isa? port 0x300 net irq 10 iomem 0xd8000 vector zpintr
3Com PCMCIA Etherlink III

Note: 对部分网路卡(特别是 NE2000 相容卡),你必须自己设定 I/O 位址与 IRQ 值,因为这些卡并无所谓的标准设定。

pseudo-device loop
loop 是一个通用的 TCP/IP 回溯介面。如果 你用 telnet 或 ftp 连回到 localhost(等同于 127.0.0.1),则该连线会透过这个 虚拟装置连回来。这是一定要有的设定,请勿拿掉。

pseudo-device ether
当你有乙太网路卡,并且想使用它的时候,你才需要这个虚拟装置 ether,。

pseudo-device sl number
sl 是给 SLIP (Serial Line Internet Protocol) 用的。目前几乎都被设定简单、适合 modem 对 modem 连线 的 PPP 给取代了。sl 后面接的 number,表示最多同时能支援几个 SLIP 连线。本使用手册其他章节对 SLIP 有更详尽的介绍,请参阅: client 或 server。

pseudo-device ppp number
ppp 提供核心模式(kernel-mode)的 PPP 拨 接支援。另外有一个 tun 则是使用者模式 (user-mode)的 PPP 支援,tun 较有弹性 且功能较多。如果你要使用这个 PPP 驱动程式,请参阅 核心模式 PPP 这一章节。如同 sl,number 设定 系统最多同时能支援几个 PPP 连线。

pseudo-device tun number
tun 是使用者模式的 PPP 软体。这支程式设 定相当方便,且速度很快。它有一些特殊的功能,像是在需要时连线时 自动拨号(dial-on-demand)。tun 后面接的数字 设定系统同时能支援几个 PPP 连线。参阅 使用者模式 PPP 以获得更多资讯。

pseudo-device bpfilter number
柏克莱的封包过滤器(Berkeley packet filter)。这个虚拟装置允 许网路配接卡切换到杂乱(promiscuous)模式,撷取广播式网路上的每 一个封包(像是乙太网路)。这些封包可以被抓到硬碟里,或是被 tcpdump(1) 程式给解读出来。注意,使用这个装置可能会危害 到网路的整体安全。最后面接的 number 设定最多同时可以有几张配接卡可以被检测。这是一个可有可无的选项 ,但建议是不要使用,除非你知道有什么潜在的危险。并不是所有的网 路卡都支援这个功能。

音效卡
这个小节包含的几行设定,并没有放在 GENERIC 核心之中,若你要加入音效卡支援,你必须到 LINT 核心(LINT 包含所有的装 置驱动设定)复制正确的几行设定,加到你的核心设定之中。 以下介绍各类音效卡设定:


controller snd0
通用的音效卡支援。除了 pca 与 pcm 以外,所有的音效卡都需要这个设定。

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 数位音效支援。

Note: 如果你的音效卡使用不同的 IRQ(像是 IRQ 5),记得要把 irq 7 改成正确的值,如 irq 5,然后移除 conflicts 这个关键字。

device sbxvi0 at isa? drq 5
SoundBlaster 16 16-bit 数位音效支援。

Note: 如果你的 SB16 使用不同的 DMA 通道(像是 6 或 7),记得改变 drq 5 成你的音效卡设定值。

device sbmidi0 at isa? port 0x330
SoundBlaster 16 MIDI 介面。如果你有 SB16,你一定要加入这一 行,不然核心将无法编译。

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 合成音效支援。如果你使用 AdLib、Sound Blaster 与 ProAudioSpectrum 任一张卡,并要使用 playmidi(包含在 ports 里面)来拨放 MIDI,就 加入这个设定。

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 资 源(不过不需要任何音效卡)。

device pcm0 at isa? port ? tty irq 10 drq 1 flags 0x0
pcm 驱动程式支援相容 WSS/MSS 或 Sound Blaster Pro、Sound Blaster 16 的各式音效卡。

Note: 额外资讯可在 /usr/src/sys/i386/isa/sound/ 与 /usr/src/sys/i386/isa/snd/ 两个档案找到。 如果你要使用任何音效装置,确定你加入了音效的 装置蜃I。

虚拟装置
虚拟装置属于核心的一部份,其行为有如一般装置,但是机器上并无相对 应的真实硬体存在。网路相关 节介绍网路方面的虚拟装置。本章节介绍其他的虚拟装置。


pseudo-device gzip
gzip 让你能执行压缩过的 FreeBSD 程式。 在 /stand 目录下的档案都是压缩过的,所以 在你的核心中加入这个选项是个明致的选择。

Note: 只有 a.out 执行档才能使用 gzip 功能。

pseudo-device log
log 是用来记录核心产生的错误讯息,这是 一定要有的设定,不可以拿掉。

pseudo-device pty number
pty 是虚拟的终端机,或模拟的 login port 。Ctelnet 或 rlogin 连线 、xterm 以及其他应用程式如 emacs 会用到 pty。 number 设定系统的 pty 个数。系统预设值是 16,如 果你要提高同时连线数,可以适当增加这个数值,最高可达 256 个。

pseudo-device snp number
监看装置。这个虚拟装置允许使用者 使用 watch(8) 指令,从一个终端机监看另一个终端机。注意,使用 这项功能牵涉到系统安全与个人隐私的问题。number 设定同时能执行几个监看程式。这个选项可有可无。

pseudo-device vn
Vnode 驱动程式。经过 vnconfig(8) 设定后,可将档案视为 一个装置来使用。这个驱动程式,在管理软碟机的映像档(image)与把 档案当作 swap 装置(像是 MS Windows 的置换档)上颇为有用。这个选 项可有可无。

pseudo-device ccd number
连结磁碟(Concatenated disks)。这个虚拟装置允许你连结数个磁 碟机的分割区成一个大磁碟。number 表 示最多会建立几个连结磁碟(不是所有可以被连结的磁碟机个数)。参阅 ccd(4) 与 ccdconfig(8) 以获得更多资讯。这个选项可有 可无。

摇杆、PC 喇叭、杂项
这个章节介绍 FreeBSD 支援的杂项硬体装置。注意,这些设定没有包含 在 GENERIC 核心,你必须从本使用手册,或是 LINT 核心复制正确的设定, 加入到你的核心之中。


device joy0 at isa? port "IO_GAME"
PC 摇杆装置。

pseudo-device speaker
支援 IBM PC 喇叭。/usr/sbin/spkrtest 这个有趣的 sh#ll script,会用到这个装置来拨放简单的音乐,而 /usr/games/piano 则让你可以用键盘来弹奏简 单的乐曲(你必须安装 games 套件才能使用这功 能)。另外,NetHack 这个出色的角色扮 演(rpg)游戏,也可以设定使用这个装置来发声。

建立装置节点
几乎所有包含在核心的每个装置,在 /dev 目录下都有一个对应的``节点''。 这些节点看起来与一般档案没什么两样, 其实是程式在使用对应的装置时,与核心沟通的进入点。 /dev/MAKEDEV 这支 sh#ll script,会在你安装作业系 统的时候,建立绝大部分系统需要的装置节点,但是并不是建立全部的节点,因 此,当你在核心中加入对新装置的支援后,记得要到 /dev 目录下查看是否有对 应的节点,如果没有就增加。以下是一个简单的范例:

假设你要核心中加入对 IDE CD-ROM 的支援,则要加入以下一行:

  device acd0
这表示你必须到 /dev 目录下,找寻是否有 acd0 开头的 entries,通常后面会接一个字母,像是 c,或是 r,表示这是一个 raw 装置 。如果你找不到,则可以切换到 /dev 目录下,输入:

  # sh MAKEDEV acd0
当这个 script 执行完毕后,你可以发现 /dev 目 录下出现 acd0c 与 racd0c 等 几个 entries,表示程式执行正确。

以下是加入音效卡节点的范例:

  # sh MAKEDEV snd0

Note: 如果你的机器有提供给其他人使用,而你建立了一些像是音效卡之类的装 置节点,最好修改 /etc/fbtab,加入这些特殊的节点 ,以保护系统安全。请参阅 man fbtab 以获得更多资讯 。

依循上述的简单程序,建立任何不在 GENERIC 里头 的硬体装置的节点。

Note: 所有的 SCSI 控制器都使用一样的装置节点,所以你无须重新建立节点。 另外,网路卡与 SLIP/PPP 虚拟装置并没有任何装置节点,所以你不必担心要 怎么建立节点。

遇到问题怎么办?
有四类的问题是在定制一个核心时可能会遇到的:


Config 程式回报错误
如果 config 程式回报错误,你可能只是打错 或漏打几个字。幸运的是,config 会显示哪一行出 现问题,你可利用 vi 快速的解决掉这些问题。例 如出现:

  config: line 17: syntax error
你可以在 vi 的命令列模式输入 17G 跳到第 17 行。比对 GENERIC 核心或是其他参考资料,以确 定你打对关键字。

make 程式执行失败
如果 make 执行失败,通常表示你的核心设定 出了问题,但是 config 并没找出错误。一样的, 检查你的设定档,如果你一直找不出问题,可以寄信给 FreeBSD general questions mailing list <freebsd-questions@FreeBSD.org> ,并附上你的核心设定档,你应该可以很快收到回应。

核心无法正常开机
如果你的新核心无法正常开机,或是不能辨认出你的硬体装置,别担 心!FreeBSD 有一套相当完善的回复机制可以解决这个问题。只要在开机 命令列输入你想启用的核心名称(例如 kernel.old ),而不是按 Enter(Return) 键跳过。在系统内保留一个可 以正常开机的核心,以备不时之需,是一个不错的想法。

在用正悸渔蛔葍}机后,你可以检查你的核心设定档,并尝试再次建 立该核心。/var/log/messages 纪录每次成功开 机时,核心产生的讯息。此外,dmesg(8) 则会列出该次开机的核心 讯息

Note: 如果你在编译核心时遇到问题,确定你在系统内有保留一个 GENERIC 核心,或是其他你知道可正常开机的 核心。不要以为有 kernel.old 就够了,因为 每次建立新核心时,kernel.old 会被最后一次 建立的 kernel 给覆写过去,而这个核心有可能是有问题的。另外,最 好把目前的开机核心覆写到 kernel,不然部分 程式如 ps(1) 将无法正常执行。接下来的指令介绍如何解除核心 的存取限制(以便把旧的核心覆写回去):

  # chflags noschg /kernel
另外,如果你要设定核心,或是其他档案的存取限制,以便他们不 被修改或移除,则可输入以下指令:

  # chflags schg /kernel
核心运作良好,但是 ps 指令却怪怪的?
如果你安装不同版本的核心到系统上,例如在使用 3.1-RELEASE 的 系统上,装了目前仍在实验阶段的 ``4.0'' 核心,许多查看 系统资讯的程式,像是 ps(1)、vmstat(8) 将无法执行。你必 须重新编译 libkvm 函式库以及这些程式。切记 不要随意从其他系统拷贝不同版本的核心来使用。



献花 x0 回到顶端 [楼 主] From:台湾中华电信 | Posted:2006-08-18 09:09 |
mnbmnb5266
个人文章 个人相簿 个人日记 个人地图
小有名气
级别: 小有名气 该用户目前不上站
推文 x5 鲜花 x46
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

核心设定是很关键的但愿这篇教学中不会出现错误


我的收藏
https://pan.baidu.com/s/1QUJ9lr_VzxXKRJAlBJgUQA
提取码:am2c
献花 x0 回到顶端 [1 楼] From:加拿大Rogers | Posted:2010-08-21 22:28 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.017650 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言